【发布时间】:2014-04-17 23:55:03
【问题描述】:
我有一个包含大量用户控件的 WPF 应用程序。其中一个控件还使用第三方 DLL,该 DLL 监视外部系统并产生事件。我订阅了这些事件并通过以下方式处理它们:
public class ControlClassD
{
private 3rdPartyEventSource _3rdPartyEventSource = new 3rdPartyEventSource();
public ControlClassD()
{
_3rdPartyEventSource.NewEvent += _3rdPartyEventSource_NewEvent;
_3rdPartyEventSource.StartMakingEventsWhenSomethingHappens();
}
private void _3rdPartyEventSource_NewEvent(object o)
{
InstanceOfControlClassA.doSomethingWith(o);
InstanceOfControlClassB.doSomethingWith(o);
InstanceOfControlClassC.doSomethingWith(o);
}
}
所有 InstanceOfControlClassx 都由启动时在 MainWindow 类中运行 _Loaded 事件处理程序的任何线程实例化。
执行处理程序的线程是由 3rdPartyEventSource 创建的,无法访问所有这些东西(如该性质的错误消息所示)
我想做的是让 3rdPartyEventSource 传递的线程返回并让创建所有这些实例的线程 (CreatorThread) 执行 HandleNewEvent。喜欢:
private void _3rdPartyEventSource_NewEvent(object o)
{
SomehowInvokeCreatorThread(new Action(() => HandleNewEvent(o)));
}
private void HandleNewEvent(object o)
{
InstanceOfControlClassA.doSomethingWith(o);
InstanceOfControlClassB.doSomethingWith(o);
InstanceOfControlClassC.doSomethingWith(o); //which may access this
}
我该怎么做?
【问题讨论】:
-
你能做类似stackoverflow.com/questions/5868451/…的事情吗?
-
我正在尝试在该线程的最后一个答案中做“矮胖”的事情,但我不知道在我的情况下“r”是什么。
标签: c# wpf multithreading