.NET中的事件和多线程代码

Joe*_*tti 0 .net c# events invoke invokerequired

项目是C#.

所以我有一堆多线程代码,旨在作为库运行.这是UI的一个单独项目.

我的库有一个中心对象,需要在创建触发事件的任何内容之前创建.

是否可以在某些对象中传递此主对象,以便我的事件可以确定何时需要调用它们以返回到主UI线程?

我真的很想让UI不必进行大量的调用,因为他的事件处理程序几乎总是从一些随机的后台线程调用.

Ree*_*sey 9

根据您的描述,您最好的选择可能是让所有对象在其构造函数中将SynchronizationContext作为参数.

如果这样做,当您需要引发事件时,可以使用SyncrhonizationContext.Post在UI线程上"调用"该事件.

这样,您的库将与UI无关(可以在Windows窗体或WPF中工作),您可以根据需要在UI线程上引发事件.

库的用户只需使用SynchronizationContext.Current创建对象(它在Windows窗体和WPF应用程序中为您提供有效的上下文,而不引入任何引用).