非法交叉线程操作异常的任何解决方案?

gil*_*gil 18 c# data-binding

当您在C#中进行数据绑定时,更改数据的线程也会导致控件更改.但是,如果此线程不是创建控件的线程,则会出现非法交叉线程操作异常.

反正有没有阻止这个?

Mik*_*one 5

您应该能够执行以下操作:

if (control.InvokeRequired)
{
    control.Invoke(delegateWithMyCode);
}
else
{
    delegateWithMyCode();
}
Run Code Online (Sandbox Code Playgroud)

InvokeRequired 是 Controls 上的一个属性,用于查看您是否在正确的线程上,然后 Invoke 将在正确的线程上调用委托。

更新:实际上,在我的上一份工作中,我们做了这样的事情:

private void SomeEventHandler(Object someParam)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
    }

    // Regular handling code
}
Run Code Online (Sandbox Code Playgroud)

这消除了对 else 块的需要,并收紧了代码。