系统线程:跨线程操作无效
本文关键字:线程 无效 操作 系统 | 更新日期: 2023-09-27 18:31:12
我的线程遇到的错误是:
跨线程操作无效。控制从创建它的线程以外的线程访问的"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);