处理需要UI访问的多个线程

时间:2012-03-21 20:14:55

标签: wpf multithreading

我们有一个基本上实现自己的消息队列的应用程序。当用户与应用程序交互时,它将生成一个操作,作为自定义操作而不是.NET类,将由我们的ActionDispatcher处理。

在ActionDispatcher类中,我有一堆CustomAction对象。我想在自己的线程中运行ActionDispatcher,但是你有使用Invoke和BeginInvoke与主UI线程进行通信的所有问题。

ActionDispatcher可以调用几种不同的方法,每种方法都需要UI端的委托用于与我认为的另一个线程进行通信。有简单的方法吗?

想要一个单独的线程的原因是ActionDispatcher处理源自服务器和UI的消息。这是一个客户端应用程序,服务器生成许多操作。我的想法是,我拥有自己的队列,UI和服务器都将消息添加到。

2 个答案:

答案 0 :(得分:0)

这实际上取决于您的应用程序的体系结构,但快速而简短的答案是:否。如果您不在UI线程上,那么您必须使用Dispather的Invoke或{{1}用于在UI线程上获取访问权限或执行代码的方法。

作为旁注,这与WinForms略有不同,它几乎听起来像是来自WinForms的角度,所以你可能想要查找WPF Dispatcher。

另一方面,我建议你研究像Prism的IEventAggregator这样的东西。我确信还有其他类似的实现,但Prism有一个很好的功能,你可以告诉它你想要订阅一个事件并让它进入UI线程,棱镜为你做其余的工作。

就我个人而言,我认为使用EventAggregator模式更好,但我不确定它是否必然更简单。

答案 1 :(得分:0)