簡體   English   中英

系統線程:跨線程操作無效

[英]System Threading: Cross-thread operation not valid

我在線程中遇到的錯誤是:

跨線程操作無效。 控件“ richTextBox8”是從不是在其上創建線程的線程訪問的。

我將這段代碼用於導致錯誤的字符串列表。

string[] parts = richTextBox8.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

現在,我正在使用System.Threading,它需要將上面的代碼轉換為類似於此代碼的格式才能正常工作,但我無法執行此操作,或者還有其他方法嗎?

richTextBox8.Invoke((Action)(() => richTextBox8.Text += "http://elibrary.judiciary.gov.ph/" + str + "\n"));

您的字符串數組(string [])在我看來還不錯。 如果inisde richTextBox8中存在空格,則應進行拆分。

關於線程,請嘗試使用委托,例如:

    public delegate void MyDelegate(string message);

   //when you have to use Invoke method, call this one:
   private void UpdatingRTB(string str)
   {
       if(richTextBox8.InvokeRequired)
           richTextBox8.Invoke(new MyDelegate(UpdatingRTB), new object []{ msg });
       else
           richTextBox8.AppendText(msg);
   }
string[] parts = null;
richTextBox8.Invoke((Action)(() => 
    {
        parts = richTextBox8.Text.Split(new string[] { " " },
        StringSplitOptions.RemoveEmptyEntries); //added semicolon
    }));

您只需要在UI線程上完成文本提取即可。

使用變量捕獲

string text = null;
richTextBox8.Invoke((Action)(() => text = richTextBox8.Text));
string[] parts = text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

沒有變量捕獲(效率略高):

var ret = (string)richTextBox8.Invoke((Func<string>)(() => richTextBox8.Text));
parts = ret.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM