Dispatcher线程无限循环

时间:2014-01-03 14:16:08

标签: c# wpf window dispatcher

我在一个单独的调度程序中创建了一个新窗口

Dispatcher dispatcher = null;
var newWindowThread = new Thread(() =>
{
    MainWindow window = new MainWindow();
    window.ShowDialog();
});

newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
while (dispatcher == null)
{
    Thread.Sleep(10);
    dispatcher = Dispatcher.FromThread(newWindowThread);
}

然后使用这个调度程序我可以调用一些动作,但在这种情况下这个窗口是模态的,我不喜欢它,我需要一个不是模态的单独窗口。

当我使用Show()而不是ShowDialog()时,执行结束,我的调度员将无法工作。
我怎么能把它放在一个无限循环中呢? 但是需要激活并响应Invoke()。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:

var newWindowThread = new Thread(() =>
{
    MainWindow window = new MainWindow();
    window.Show();
    window.Closed += window_Closed; //here we have method which will shutdown current Dispatcher when window is closed
    Dispatcher.Run();
});

仍然不确切知道Dispatcher.Run();有效,但它做我需要的。

相关问题