项目是C#。
所以我有一堆多线程代码,旨在作为库运行。它来自UI的单独项目。
我的图书馆有一个中心对象,需要在创建触发事件的任何内容之前创建。
是否可以在某些对象中传递此主对象,以便我的事件可以确定何时需要调用它们以返回主UI线程?
我真的很想让UI不必进行大量的调用,因为他的事件处理程序几乎总是从一些随机的后台线程调用。
答案 0 :(得分:9)
根据您的描述,您最好的选择可能是让所有对象在其构造函数中以SynchronizationContext作为参数。
如果你这样做,当你需要举起一个事件时,你可以使用SyncrhonizationContext.Post在UI线程上“调用”该事件。
这样,您的库将与UI无关(可以在Windows窗体或WPF中工作),您可以根据需要在UI线程上引发事件。
您的库的用户只需使用SynchronizationContext.Current创建您的对象(它可以在Windows窗体和WPF应用程序中为您提供有效的上下文,而无需引用任何参考)。
答案 1 :(得分:0)
使用计时器或响应事件,UI线程(或线程上的数据绑定对象)可以轮询“状态”对象并限制UI必须执行的工作量。
答案 2 :(得分:0)