我有一個非常強大的線程應用程序,效果很好......但是,當單擊重新啓動按鈕時...它通過代碼進行處理,放置viewmodels並關閉主窗口...因此返回dialogresult並返回到app.xaml.cs.重新啓動WPF應用程序更改主窗口線程所有者
這是怎麼了,我實現重啓...
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我的所有其他類抱怨擁有它的另一個線程。我想我通過把((應用程序)應用程序).Dispatcher.Invoke得到這一點,但我不希望在重新啓動前沒有必要。
什麼能解釋Application.Current.MainWindow不是它創建的同一個線程?
乾杯。
剛纔檢查Application.Current.Dispatcher.Invoke和Application.Current.MainWindow.Dispatcher.Invoke但主窗口似乎是在完成不同的線程! – bl4kh4k 2013-03-27 18:59:35