我有一个运行后台线程来触发事件,但是如何使用NET CF确保线程安全地调用这些事件?
我会在.NET平台上使用ISyncronizeInvoke,但我在NET CF上找不到这个。我确定有一个等效的......或者?
答案 0 :(得分:7)
Compact Framework 确实有Control.Invoke
/ BeginInvoke
,但我认为它仅限于EventHandler
委托(任何其他委托在执行时抛出异常)时间)。
假设您的实际实例ISynchronizeInvoke
将成为UI控件,我只需将引用作为Control
传递给任何需要它的人。如果确实想要使用界面,您可以随时创建自己的ISynchronizeInvoke
界面,然后创建一个仅包装Control
的实现。
答案 1 :(得分:4)
是的,它在.NET CF中可用,以下是这样一个项目的摘录: 从另一个线程调用 SampleMethod()。
delegate void SimpleInvokeDelegate();
private void SampleMethod()
{
if (InvokeRequired)
{
Invoke(new SimpleInvokeDelegate(SampleMethod));
}
else
{
// Update UI elements here.
}
}