Если пользователь все равно должен ждать, зачем вам использовать фоновый поток для загрузки окна?
возможно сделать это:
private async void Button_Click(object sender, RoutedEventArgs e)
{
try
{
Mouse.OverrideCursor = Cursors.Wait;
await Task.Run(() => LoadWindow());
}
finally
{
Mouse.OverrideCursor = null;
}
}
Но тогда пользовательский интерфейс остается отзывчивым - что противоречит использованию вами курсора ожидания.
Я думаю, что было бы лучше не иметь фонового потока и просто установить курсор перед открытием окна , затем положите его обратно после.
Я использую несколько помощников для этого:
internal static void ShowWithWaitCursor(this Window view)
{
WithWaitCursor(() => view.Show());
}
internal static void WithWaitCursor(Action action)
{
Func<int> func = () => { action.Invoke(); return 0; };
WithWaitCursor<int>(func);
}
internal static T WithWaitCursor<T>(Func<T> func)
{
try
{
Mouse.OverrideCursor = Cursors.Wait;
return func.Invoke();
}
finally
{
Mouse.OverrideCursor = null;
}
}
Откройте окно:
Window win = new MyWindow();
win.DataContext = new MyViewModel(injectDependencies);
win.ShowWithWaitCursor();
Иногда ViewModel требуется некоторое время для загрузки так что я использую это:
Window win = new MyWindow();
win.DataContext = WindowHelpers.WithWaitCursor(() => new MyViewModel(injectDependencies));
win.ShowWithWaitCursor();