Не меняя потока, вы должны запустить TowerPinsVisu()
в фоновом потоке, используя Task.Run
. Пока этот поток запущен, вы можете показать диалог. Вы можете присоединить к Task
продолжение, которое будет выполнено после того, как Task
завершится. Передавая SynchronizationContext
потока пользовательского интерфейса в продолжение, вы можете заставить это продолжение выполняться в потоке пользовательского интерфейса (что необходимо для закрытия диалогового окна:
// If this method executes on the UI thread...
private void RunTasks()
{
// Start a background thread and continue immediately to show the modal screen.
Task.Run(TowerPinsVisu)
.ContinueWith(task => loadingForm.Close(), TaskScheduler.FromCurrentSynchronizationContext());
loadingForm.ShowDialog("OPTIMIZING...");
}
// ...then this method will too => No need to use a Dispatcher at this point
public void ShowDialog(string text)
{
lblLoadingInfo.Content = text;
ShowDialog();
}