Oprócz powyższych sugestii (pracownik w tle, dyspozytor) - tak, to są poprawne techniki, aby uzyskać to, czego chcesz, ale pozwól mi omówić efekt interfejsu, o który prosiłeś w swoim pytaniu. Jeśli używasz wzorca MVVM, możesz utworzyć interfejs użytkownika "Jestem zajęty" i powiązać z właściwością IsBusy w modelu widoku, aby pokazać i ukryć interfejs użytkownika. Na przykład:
public class MyViewModel : INotifyPropertyChanged
{
// Bind to this property any UI you want to
// show/hide during long running updates
public bool IsBusy
{
get { return _isBusy; }
set
{
_isBusy = true;
OnPropertyChanged("IsBusy");
}
}
private void OnPropertyChanged(string prop)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(prop));
}
}
// Note: This is intended to be called on a background thread
private void DoLongRunningOperationOnABackgroundThread()
{
try
{
IsBusy = true;
// do your work
}
finally
{
IsBusy = false;
}
}
}
następnie w użyciu interfejs ten XAML (lub podobny)
<UserControl:MyControl x:Class="MyApp.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="boolToVis"/>
</UserControl.Resources>
<Grid>
<!-- your UI code goes here -->
<!-- Below this, at higher Z-Order place a control to gray out the screen when IsBusy = true -->
<Border Background="#55000000" BorderThickness="0" Visibility="{Binding IsBusy, Converter={StaticResource boolToVis}}">
<TextBlock Text="I AM BUSY!" Font-Size="32" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White"/>
</Border>
<Grid>
</UserControl>
Efekt netto będzie podczas korzystania pracownikowi tła lub puli wątków, aby wywołać funkcję DoLongRunningOperation w viewmodel, granica zdefiniowana w Xaml będzie się wyświetlać/ukrywać podczas startu/zatrzymania operacji. Nie będziesz potrzebował dyktafonu do wywoływania tutaj, ponieważ WPF obsługuje ci systemowanie wątków.
Istnieją implementacje zajętych kontrolek z animacjami typu whirlygig, itp. ... również w Internecie, aby urozmaicić interfejs użytkownika.
Pozdrawiam,
Dziękuję bardzo, to było bardzo pomocne! –