2012-03-21 311 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。