2010-01-22 68 views
1

問候,即時通訊編程新手。C#調用動作跨線程訪問

此刻,我的應用程序使用委託來處理/執行駐留在另一個類/對象中的方法。

但我得到一個錯誤,指出他們居住在separte線程。所以在搜索網絡後,我想出了這個:

this.Invoke(new Action(delegate() { this.ChatRichTextBox.AppendText(EventArgs.commMessage); })); 

這工作得很好接受我不知道發生了什麼事情。我只是粘貼了代碼,它的工作。

目前雖然我需要這樣做,因爲編譯器說它不能在此操作中執行> <!=操作。

請告知如何最好地實現這一點?

非常感謝。

+0

我不明白你的意思,當你說 「它不能做><=操作!」。你可以發佈該代碼嗎? – hackerhasid 2010-01-22 17:48:22

+0

我會,但我現在離開我的電腦。直到那時。謝謝。 – iTEgg 2010-01-22 18:35:01

回答

4

對Windows窗體控件的訪問是 本質上不是線程安全的。如果 有兩個或更多個線程操縱控件的狀態,則可能有 強制控件進入不一致狀態 。其他 線程相關的錯誤是可能的,例如 作爲競爭條件和死鎖。它 對於確保以 線程安全的方式執行對您的控件的訪問 非常重要。

如果不使用Invoke 方法,調用不同於 控件的 線程來調用控件是不安全的。

+0

這與<!=操作有關嗎? – 2010-01-22 19:33:58

+0

它解釋了跨線程操作(OP沒有理解) – 2010-01-22 23:10:11