我有一个Class(称为'Foo'),它有一个System.Timers.Timer(称之为'myTimer')。
Foo包装非托管非线程安全代码。
在myTimer.Elapsed上我需要使用Foo中的方法。
现在myTimer正在尝试在工作线程上使用Foo的方法,但这不起作用。
我需要回到包含Foo'Methods。
的线程我如何做到这一点? 仅供参考,Foo的方法属于非UI线程。
答案 0 :(得分:5)
如果Foo不是UI线程,并且您需要从另一个线程调用代码来执行它,则需要捕获执行Foo的同步上下文,然后从其上调用您的代码。
看一下SynchronizationContext课程。您可以Post(异步)或Send委托在特定的,先前捕获的同步上下文中执行。
您可能还需要/需要查看ExecutionContext课程。特别是:ExecutionContext.Capture和ExecutionContext.Run