2

我从我的线程中遇到的错误是:

跨线程操作无效。控件“richTextBox8”从创建它的线程以外的线程访问。

我有此代码用于导致错误的字符串列表。

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

现在我正在使用 System.Threading ,它需要将上面的代码转换为类似于此代码的格式才能工作,但我无法做到这一点,或者还有其他方法吗?

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

3 回答 3

2

你的字符串数组 (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);
   }
于 2012-04-13T12:22:37.913 回答
1
string[] parts = null;
richTextBox8.Invoke((Action)(() => 
    {
        parts = richTextBox8.Text.Split(new string[] { " " },
        StringSplitOptions.RemoveEmptyEntries); //added semicolon
    }));
于 2012-04-13T12:24:52.173 回答
1

您只需要在 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);
于 2012-04-13T12:36:02.990 回答