当您在 C# 中进行数据绑定(bind)时,更改数据的线程也会导致控件发生更改。但是,如果该线程不是创建控件的线程,您将得到一个非法跨线程操作异常。
有什么办法可以防止这种情况发生吗?
最佳答案
您应该能够执行以下操作:
if (control.InvokeRequired)
{
control.Invoke(delegateWithMyCode);
}
else
{
delegateWithMyCode();
}
InvokeRequired 是 Controls 上的一个属性,用于查看您是否在正确的线程上,然后 Invoke 将在正确的线程上调用委托(delegate)。
更新:实际上,在我上一份工作中,我们做了这样的事情:
private void SomeEventHandler(Object someParam)
{
if (this.InvokeRequired)
{
this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
}
// Regular handling code
}
这消除了对 else block 的需要,并在某种程度上加强了代码。
关于c# - 任何非法跨线程操作异常的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1994/