我继承了一个遗留的WinForms应用程序,它充满了可怕的线程问题和跨线程表单更新。开发人员使用了Control.BeginInvoke来封送调用,但并不十分成功。我认为最初的开发人员是一个C程序员,所以他们的方法是非常线性和命令式的。我很同情,因为我在20多年前C#首次出现时犯了很多同样的错误。
我在想,如果我用MediatR通知替换这些跨线程控制更新,这会把处理程序封送到UI的STA线程吗?还是我仍然需要关心线程封送?
我已经在其他场合使用响应式扩展解决了这类问题,但我想知道MediatR是否会以更直接的方式在这种情况下提供帮助?
1条答案
按热度按时间a9wyjsp71#
MediatR对WinForms(或一般的SynchronizationContexts)一无所知。它“只是”一个简单的模式,用于解耦命令/事件及其处理程序。
如果你在一个同步很重要的应用程序中使用它(winforms/wpf),你必须自己完成调度。例如,对于winforms:使用InvokeRequired/Invoke模式将内容发布到UI线程。