我的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.这个问题的最佳解决方案是什么?使用委托还是像我尝试的那样禁用CheckForIllegalCrossThreadCalls?许多文章都说禁用CheckForIllegalCrossThreadCalls不是一种好的编程实践。
发布于 2012-03-21 18:30:46
禁用CheckForIllegalCrossThreadCalls就像抱怨你在撞车时被安全气囊撞到一样:正确的解决方案不是移除安全气囊,而是避免撞车。
你只是不应该从错误的线程进行UI更新。你可能在大多数情况下都能幸免于难(禁用了检查),但这并不意味着这是一个好主意--它会让你暴露在细微的错误中,这些错误只会偶尔出现,真的很难追踪到。
所以,是的,使用Control.Invoke、Dispatcher.Invoke、BackgroundWorker等来编组到正确的线程以进行UI访问。这就是这些调用/类型存在的原因。
发布于 2012-03-21 18:30:59
不同问题的answer可以为您提供答案。简短的答案是:不。切换到BackgroundWorkers。
https://stackoverflow.com/questions/9802615
复制相似问题