2017-04-12 81 views

回答

0

您不能從除主線程以外的任何線程中更改UI組件。

嘗試以下操作:

richTextBox1.Invoke(new Action(() => { richTextBox1.Text = val.ToString(); })); 

調用導致要在UI線程中運行指定的動作。

+0

我得到了和圖表相同的錯誤:( – rhsn

+0

@rhsn然後你必須對圖表做相同的處理(你必須調用它),否則,考慮爲圖表提供代碼 – MetaColon

+0

@rhsn如果你有同樣的錯誤,那麼它應該是相當明顯的是什麼是需要修復它。 –

0

正如異常告訴你的,你試圖訪問另一個線程上的UI元素,而不是它的創建。但是,您必須知道UI元素只能由您創建它們的線程訪問。你可能在主線程上創建了這個UI元素(這意味着你在正常情況下創建它,而不是在異步上下文中),但試圖在另一個線程(可能在異步上下文中)訪問它。無論如何要訪問它,您必須調用您想要對您創建的線程上的元素執行的任何操作。但是你不必知道你創建了哪個線程,因爲UI元素本身就知道它。要調用它在它的線程使用Invoke

var val1 = (string)val.Clone(); 
if(richTextBox1.InvokeRequired) 
    richTextBox1.Invoke(new Action(() => richTextBox1.Text = val1)); 
else 
    richTextBox1.Text = val1; 

你可以看到,我值複製到另一個變量,它可以是有用的變量val可同時分配值,以RTB的文本改變。此外,我檢查了其實際需要的調用,因爲如果它已經在正確的線程上,則不必調用它。

+0

我得到了很多地區的錯誤。其實我不明白錯誤。 – rhsn

+0

@rhsn然後提供代碼,在其中你得到的錯誤 - 否則我們不會能夠幫助你 – MetaColon

+0

我寫了那部分繪製圖:'this.chart1.Series [「Datas」]。Points.AddXY(z,s);'但是我得到了那個錯誤:跨線程操作無效:控制'chart1'從其創建的線程以外的線程訪問 – rhsn

相關問題