我有一个具有 System.Timers.Timer 的类(称为“Foo”)(称为“myTimer”)。
Foo 包装非托管非线程安全代码。
在 myTimer.Elapsed 上,我需要使用 Foo 中的方法。
现在 myTimer 正在尝试在工作线程上使用 Foo 的方法,但这不起作用。
我需要回到包含 Foo 方法的线程。
我该如何做到这一点?仅供参考,Foo 的方法位于非 UI 线程中。
如果 Foo 不是 UI 线程,并且您需要调用代码以从不同的线程在其上执行,您将需要捕获执行 Foo 的同步上下文,然后从其上的计时器调用您的代码。
看一下SynchronizationContext类。您可以发布(异步)或发送要在特定的、先前捕获的同步上下文上执行的委托。
您可能还希望/需要查看ExecutionContext类。特别是:ExecutionContext.Capture和ExecutionContext.Run