正在禁用';CheckForIllegalCrossThreadCalls';阻止跨线程错误的好方法

本文关键字:错误 线程 方法 CheckForIllegalCrossThreadCalls | 更新日期: 2023-09-27 18:28:43

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

System.InvalidOperationException: Cross-thread operation not valid: Control 'myTextBox'
accessed from a thread other than the thread it was created on.

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

正在禁用';CheckForIllegalCrossThreadCalls';阻止跨线程错误的好方法

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

你根本不应该从错误的线程进行UI更新。您在大多数情况下可能会逃脱惩罚(禁用检查),但这并不意味着这是一个好主意——它会让您容易出现细微的错误,这些错误只会偶尔出现,而且真的很难追踪。

因此,是的,使用Control.InvokeDispatcher.InvokeBackgroundWorker等封送到正确的线程以进行UI访问。这就是为什么存在这些调用/类型。

不同问题的答案就是你的答案。简短的回答是:没有。切换到BackgroundWorkers。