2

我有一个具有 System.Timers.Timer 的类(称为“Foo”)(称为“myTimer”)。

Foo 包装非托管非线程安全代码。

在 myTimer.Elapsed 上,我需要使用 Foo 中的方法。

现在 myTimer 正在尝试在工作线程上使用 Foo 的方法,但这不起作用。

我需要回到包含 Foo 方法的线程。

我该如何做到这一点?仅供参考,Foo 的方法位于非 UI 线程中。

4

1 回答 1

5

如果 Foo 不是 UI 线程,并且您需要调用代码以从不同的线程在其上执行,您将需要捕获执行 Foo 的同步上下文,然后从其上的计时器调用您的代码。

看一下SynchronizationContext类。您可以发布(异步)或发送要在特定的、先前捕获的同步上下文上执行的委托。

您可能还希望/需要查看ExecutionContext类。特别是:ExecutionContext.CaptureExecutionContext.Run

于 2012-06-06T18:01:21.290 回答