在WPF中将一个新的Dispatcher绑定到线程上

5
我有这样一种情况:我正在显示一个充当启动画面的Window。这个窗口在与主UI线程不同的单独线程上创建,因此它与自己的Dispatcher相关联(即我最终拥有两个Dispatcher,即主UI Dispatcher和“Splash” Dispatcher )。
当我关闭启动窗口时,与启动窗口线程相关联的 Dispatcher 关闭了(尽管线程仍在运行,这正是我想要的);但是,我想能够在稍后的同一线程上再次显示启动窗口。我面临的问题是,第二次尝试这样做时, Dispatcher 会抱怨它已经关闭了。 是否有一种方法可以强制将新的 Dispatcher 与先前具有 Dispatcher 的线程关联起来? 还是有一种方法可以使 Dispatcher 在窗口关闭时不关闭? 我知道我可以通过创建一个新线程来解决这个问题,但我真的不想这样做。理想情况下,我希望有一个专用线程负责类似于启动和弹出式“烤面包机”的异步通知。
注意: 我在此处发布了相关代码:https://gist.github.com/DamianReeves/76771a031f05a8be042d

如果在第二个线程关闭后调用Dispatcher.Run()会发生什么? - Mike Dinescu
1
另外,如果您能够包含最少量的代码以重现您的问题,那将会很有帮助。这样我们就可以在发布答案之前验证解决方案是否有效。 - Mike Dinescu
1
你读过这个吗?http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/ 我之前成功使用过它。 - Mike Dinescu
提到的问题与我所面临的问题有些相反(我的代码关闭了调度程序,他的代码没有关闭,而是强制关闭)。话虽如此,我会仔细查看我的“EventLoopScheduler”使用方式如何影响第二个线程的行为。 - Damian
这可能是一个愚蠢的问题,但你尝试过Dispatcher.CurrentDispatcher吗?它应该为调用线程创建一个新的Dispatcher。我不确定的是,关闭的Dispatcher是否会被替换... - Zache
显示剩余4条评论
1个回答

1
回答你的第一个问题: 有没有一种方法可以强制将新的Dispatcher与先前已关联了Dispatcher的线程关联起来?
“当在线程上创建Dispatcher时,即使Dispatcher被关闭,它也成为唯一可以与该线程关联的Dispatcher。”
还有
“如果关闭了Dispatcher,则无法重新启动。”
请参阅Remarks部分中的http://msdn.microsoft.com/en-us/library/vstudio/system.windows.threading.dispatcher

感谢您回答问题的第一部分,文档非常清晰。 - Damian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接