2012-03-21 312 views
1

我在我的C#应用​​程序上运行的多个线程,每个线程这些线程的访问TextBox记录的事件。当我CheckForIllegalCrossThreadCalls属性设置为false,我能够阻止许多跨线程错误:禁用“CheckForIllegalCrossThreadCalls”是阻止跨线程错误的好方法吗?

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

,这是什么问题的最佳解决方案?使用代表或禁用CheckForIllegalCrossThreadCalls,因为我试过了?许多文章说,禁用CheckForIllegalCrossThreadCalls不是一个好的编程习惯。

回答

10

停用CheckForIllegalCrossThreadCalls就好像抱怨说碰撞汽车时撞上了安全气囊:正确的解决办法不是取下安全气囊,而是为了避免碰撞汽车。

你根本不应该让从错误的线程UI更新。您可能摆脱它的大部分时间(已禁用检查),但是,这并不意味着它是一个好主意 - 它让你开到细微的错误,这只会出现偶尔,并真的难追查。

所以是的,使用Control.Invoke,Dispatcher.Invoke, BackgroundWorker等编组到正确的线程进行UI访问。这就是为什么这些电话/类型存在。

0

answer到一个不同的问题有答案给你。 简短的回答是:不。 切换到BackgroundWorkers。