Следует избегать блокировки основного потока пользовательского интерфейса с предубеждением.
Я бы использовал BusyIndicator
элемент управления из набора инструментов Silverlight: -
<UserControl x:Class="StackoverflowSpikes.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">
<toolkit:BusyIndicator x:Name="busyInd" >
<Grid x:Name="LayoutRoot">
<!-- The rest of your content -->
</Grid>
</toolkit:BusyIndicator>
</UserControl>
Перед звонком Load
используйте: -
busyInd.IsBusy = true;
затем на LoadComplete
использовать: -
busyInd.IsBusy = false;
Это заблокирует пользовательский ввод в пользовательском интерфейсе без блокировки основного потока и даст некоторую обратную связь о том, почему они не могут ничего щелкать прямо сейчас. Вы можете предоставить свой собственный контент для сообщения о занятости, используя свойство BustContent
. Конечно, если вам не нравится, как он выглядит, вы можете настроить его по своему вкусу.
Если вы хотите получить все MVVM, вы можете привязать свойство IsBusy
к свойству виртуальной машины, которое указывает, что виртуальная машина не хочет, чтобы что-либо изменилось прямо сейчас.