如果我在UI上调用一个方法线程是否由Windows消息队列进行了搜索,随后又不需要重入?
private void CalledFromWorkerThread()
{
//changed from 'InvokeRequired' Anti-Pattern
this.Invoke((Action) (() => _counter++; /* Is this ok? */ ));
}
澄清:只有UI线程才会访问_counter。
答案 0 :(得分:9)
你所拥有的是好的,假设只有UI线程才能访问_counter
。
如果两个线程调用你的CalledFromWorkerThread
,那么_counter将正确增加并保持线程安全。
答案 1 :(得分:4)
根据澄清,只有UI线程正在访问_counter,您不需要锁定。我已经更新了我的例子。我更喜欢用这种方式编码,以避免额外的调用,如果需要调用。
private void CalledFromWorkerThred()
{
this.Invoke((Action) (() => _counter++; ));
}
答案 2 :(得分:2)
它将委托来自同一线程的调用,并不一定意味着您在该函数中执行的所有操作都将是线程安全的。