我正在开发一些corss平台库,需要在UI线程上执行一个动作。 虽然我知道有一个方法Dispatcher.RunAsync可以在UI线程上执行动作,但它是异步的,我不能使用await / async功能,因为代码是corss平台而我不希望该库被绑定到.net 4.5的等待/异步功能。
有没有办法同步在UI线程上执行操作?
由于
答案 0 :(得分:2)
跨平台库不应依赖于特定的用户界面(例如Dispatcher
或CoreDispatcher
)。有一种代表抽象“背景”的类型:SynchronizationContext
;我不久前写了一篇关于这个主题的MSDN article。
如果您的库可以在需要使用它之前捕获UI上下文,那么您可以捕获SynchronizationContext.Current
,然后使用Send
同步执行原始上下文中的某些代码。 / p>
答案 1 :(得分:1)
如果从UI线程执行它 - 则无法执行此操作。从后台线程可以执行此操作,例如使用您在调用RunAsync并从RunAsync回调中设置它后等待的AutoResetEvent。