我有一个非常强大的线程应用程序,效果很好......但是当单击重新启动按钮时......它遵循代码,处理视图模型并关闭主窗口......从而返回对话框结果并返回到 app.xaml 。CS。
这就是我实施重启的方式......
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);
这又会再次循环并重置窗口对象和视图模型对象,但现在我所有其他类中的 Application.Current.MainWindow 抱怨拥有它的不同线程。我想我可以通过放置 ((App)Application).Dispatcher.Invoke 来解决这个问题,但是我不希望这样做,因为在重新启动之前不需要。
什么可以解释 Application.Current.MainWindow 不是它创建的同一个线程?
干杯。