首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用'CheckForIllegalCrossThreadCalls‘是阻止跨线程错误的好方法吗?

禁用'CheckForIllegalCrossThreadCalls‘是阻止跨线程错误的好方法吗?
EN

Stack Overflow用户
提问于 2012-03-21 18:24:04
回答 2查看 3.7K关注 0票数 2

我的C#应用程序中运行着许多线程,每个线程都访问一个TextBox来记录它的事件。当我将CheckForIllegalCrossThreadCalls属性设置为false时,我能够阻止许多跨线程错误:

代码语言:javascript
复制
System.InvalidOperationException: Cross-thread operation not valid: Control 'myTextBox'
accessed from a thread other than the thread it was created on.

这个问题的最佳解决方案是什么?使用委托还是像我尝试的那样禁用CheckForIllegalCrossThreadCalls?许多文章都说禁用CheckForIllegalCrossThreadCalls不是一种好的编程实践。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 18:30:46

禁用CheckForIllegalCrossThreadCalls就像抱怨你在撞车时被安全气囊撞到一样:正确的解决方案不是移除安全气囊,而是避免撞车。

你只是不应该从错误的线程进行UI更新。你可能在大多数情况下都能幸免于难(禁用了检查),但这并不意味着这是一个好主意--它会让你暴露在细微的错误中,这些错误只会偶尔出现,真的很难追踪到。

所以,是的,使用Control.InvokeDispatcher.InvokeBackgroundWorker等来编组到正确的线程以进行UI访问。这就是这些调用/类型存在的原因。

票数 12
EN

Stack Overflow用户

发布于 2012-03-21 18:30:59

不同问题的answer可以为您提供答案。简短的答案是:不。切换到BackgroundWorkers。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9802615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档