作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 C# 应用程序中运行着许多线程,每个线程都访问 TextBox
以记录其事件。当我设置 CheckForIllegalCrossThreadCalls属性设置为 false
,我能够阻止许多跨线程错误:
System.InvalidOperationException: Cross-thread operation not valid: Control 'myTextBox'
accessed from a thread other than the thread it was created on.
这个问题的最佳解决方案是什么?使用委托(delegate)或禁用 CheckForIllegalCrossThreadCalls
我试过了吗?许多文章说禁用 CheckForIllegalCrossThreadCalls
不是一个好的编程习惯。
最佳答案
禁用 CheckForIllegalCrossThreadCalls
就像提示你在撞车时被安全气囊撞到:正确的解决方案不是移除安全气囊,而是为了避免撞车。
您根本不应该从错误的线程进行 UI 更新。大多数情况下,您可能都逃脱了它(禁用了检查),但这并不意味着这是一个好主意 - 它让您容易出现细微的错误,这些错误只会偶尔出现并且是真的很难追踪。
是的,使用 Control.Invoke
、Dispatcher.Invoke
、BackgroundWorker
等编码到正确的线程以进行 UI 访问。这就是存在这些调用/类型的原因。
关于c# - 禁用 'CheckForIllegalCrossThreadCalls' 是阻止跨线程错误的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9802615/
我是一名优秀的程序员,十分优秀!