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

Wpf 处理需要UI访问的多个线程,wpf,multithreading,Wpf,Multithreading,我们有一个应用程序,它基本上实现了自己的消息传递队列。当用户与应用程序交互时,它将生成一个由ActionDispatcher处理的操作,该操作是自定义操作而不是.NET类 在ActionDispatcher类中,我有一个CustomAction对象堆栈。我希望在自己的线程中运行ActionDispatcher,但是使用Invoke和BeginInvoke与主UI线程通信时会遇到所有问题 ActionDispatcher可以调用几种不同的方法,每种方法都需要UI端的一个委托来与另一个线程通信。有没

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

在ActionDispatcher类中,我有一个CustomAction对象堆栈。我希望在自己的线程中运行ActionDispatcher,但是使用Invoke和BeginInvoke与主UI线程通信时会遇到所有问题

ActionDispatcher可以调用几种不同的方法,每种方法都需要UI端的一个委托来与另一个线程通信。有没有更简单的方法


需要单独线程的原因是ActionDispatcher处理来自服务器和UI的消息。这是一个客户端应用程序,许多操作由服务器生成。我的想法是,我们有自己的队列,用户界面和服务器都向其中添加消息。

这实际上取决于应用程序的体系结构,但快速简短的回答是:不。如果您不在用户界面线程上,然后,您必须使用Dispather的
Invoke
BeginInvoke
方法在UI线程上获得访问权或执行代码

作为补充说明,这与WinForms中的稍有不同,它听起来几乎像是从WinForms的角度来看的,因此您可能需要查找WPF Dispatcher

另一方面,我建议你研究一下Prism的IEventAggregator。我相信还有其他类似的实现,但Prism有一个很好的功能,你可以告诉它你想订阅一个事件,然后让它进入UI线程,Prism会为你完成其余的工作


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

您需要使用Dispatcher.CheckAccess()