c# - 任何非法跨线程操作异常的解决方案?

标签 c# data-binding

当您在 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/

相关文章:

C# 填充字典值

c# - DataContext 不会传播到自定义控件中的子级(非可视)

c# - 每个用户的 WebApi OData 属性安全性

c# - 从 AWS-API 网关发布到 Lambda

c# - 没有参数的 SQL 注入(inject)攻击的任何风险,但强制用户输入仅限于正则表达式 [a-zA-Z][a-zA-Z0-9]*?

Java bean 绑定(bind)属性到极坐标方程

c# - 当包含的子实例发生更改时,是否可以在父类中触发 setter?

c# - 数据绑定(bind)到 BindableProperty 会导致错误 "mismatching type between value and property"

asp.net - 无法对 DataRows 的 IEnumerable 进行数据绑定(bind)吗? HttpException?

c# - 查看 MVC 2 中无法正常工作的数据