我正在开发一些 corss 平台库,需要在 UI 线程上执行一个操作。虽然我知道有一个方法 Dispatcher.RunAsync 可以在 UI 线程上执行操作,但它是异步的,我不能使用 await/async 功能,因为代码是跨平台的,我不希望库绑定到.net 4.5 的等待/异步功能。
有什么方法可以在 UI 线程上同步执行操作?
谢谢
我正在开发一些 corss 平台库,需要在 UI 线程上执行一个操作。虽然我知道有一个方法 Dispatcher.RunAsync 可以在 UI 线程上执行操作,但它是异步的,我不能使用 await/async 功能,因为代码是跨平台的,我不希望库绑定到.net 4.5 的等待/异步功能。
有什么方法可以在 UI 线程上同步执行操作?
谢谢
跨平台库不应依赖于特定的 UI(例如,Dispatcher
或CoreDispatcher
)。有一种表示抽象“上下文”的类型SynchronizationContext
:不久前我写了一篇关于这个主题的MSDN 文章。
如果您的库可以在需要使用 UI 上下文之前捕获它,那么您可以捕获SynchronizationContext.Current
并稍后用于Send
在原始上下文上同步执行一些代码。
如果您从 UI 线程执行它 - 没有办法做到这一点。例如,您可以在后台线程中使用 AutoResetEvent,在调用 RunAsync 并从 RunAsync 回调设置它之后等待该事件。