У меня есть довольно интенсивное приложение для потоковой обработки, которое отлично работает ... однако, когда нажата кнопка перезапуска ... она следует через код, предоставляет модели просмотра и закрывает главный экран ... таким образом возвращая диалоговое окно и возвращаясь к app.xaml.cs.Перезапуск WPF App change Владелец темы Mainwindow
Это, как я реализовал рестарт ...
base.OnStartup(e);
// Register required assemblies.
RegisterAssemblies();
foreach (FolderType type in FolderType.GetValues())
{
if (!Directory.Exists(type.Value))
{
Directory.CreateDirectory(type.Value);
}
}
bool? restart = true;
ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
dynamic window;
MainWindowViewModel viewModel;
while (restart == true)
{
running = true;
string[] files = Directory.GetFiles(FolderType.LASTCONFIGURATION.Value);
lastConfiguration = string.Empty;
if (files.Length != 0)
{
lastConfiguration = files[0];
}
#if (!DEBUG)
if (SystemParameters.PrimaryScreenHeight == 1080)
{
window = new MainWindowHD();
}
else
{
window = new MainWindow();
}
Mouse.OverrideCursor = Cursors.None;
#else
window = new MainWindow();
#endif
window.ShowInTaskbar = false;
viewModel = new MainWindowViewModel(lastConfiguration, "saved_settings.xml", FolderType.CASES + "\\" + "case_configuration.xml");
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
window.DataContext = viewModel;
}
));
restart = window.ShowDialog();
}
if (systemShutdown)
{
Process.Start("shutdown", "/s /t 0");
}
Shutdown(0);
Это снова поворачивает петли и сбрасывает объект окна и объект ViewModel, но теперь Application.Current.MainWindow во всех моих других классов жалуются другой поток, владеющий им. Я думаю, что я получаю это, добавляя приложение (приложение) .Dispatcher.Invoke, однако я бы предпочел не делать так, как не было необходимости до перезапуска.
Что может объяснить Application.Current.MainWindow не из того же потока, на котором он был создан?
Cheers.
Только что проверил Application.Current.Dispatcher.Invoke и Application.Current.MainWindow.Dispatcher.Invoke но MainWindow, кажется, на завершенном другом потоке! – bl4kh4k