C# 调度线程无限循环

C# 调度线程无限循环,c#,wpf,window,dispatcher,C#,Wpf,Window,Dispatcher,我在一个单独的调度器中创建了一个新窗口 Dispatcher dispatcher = null; var newWindowThread = new Thread(() => { MainWindow window = new MainWindow(); window.ShowDialog(); }); newWindowThread.SetApartmentState(ApartmentState.STA); newWindowThread.IsBackground

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

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()时,执行将结束,我的调度程序将无法工作。
如何将其放入无限循环中?

但是tread需要激活并响应Invoke()。

我找到了一个解决方案:

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()是如何运行的;工作正常,但它满足了我的需要。

虽然我不能100%确定这一点,但我认为您需要
Application.Run(new MainWindow())线程
中运行code>,而不是您拥有的。您的主窗口仍然在主线程/调度程序上运行…无论您想做什么(尝试解释一下),这都不是正确的方式。因此您认为它可以工作,但不知道如何或为什么?有信心继续前进吗?