TextBox.Text.Replace() MultiThreading

本文关键字:MultiThreading Replace Text TextBox | 更新日期: 2023-09-27 17:59:11

im使用文本框,需要替换文本框中的文本。问题是我需要更换718个不同的项目。我想把每个替换都放入自己的线程中,以加快进程,但当我这样做时,它永远不会替换。

我试过类似于下面的

foreach (Match m in matchCollection)
{
ReplaceClass r = new ReplaceClass(TextBox,m,ReplaceText)
Thread th = new Thread(new ThreadStart(r.Replace))
th.start()
}

TextBox.Text.Replace() MultiThreading

正如Dyppl在注释中所写的那样,您只能从声明表单并正在运行的线程访问表单。我认为,如果你想加快这个过程,不要替换文本框中的文本,而是将文本复制到一个临时字符串中,对其进行修改(替换匹配项),然后覆盖表单中的文本。所以

string text = TextBox.Text
foreach (Match m in matchCollection)
{
   text = somereplacement(m,replacetext);
}
TextBox.Text = text;

编辑:正如Anthony Pegram所说,在循环中以这种方式操作字符串是不好的,因为每次都会创建字符串,但我不知道替换函数是做什么的。更好的方法可能是

StringBuilder text = new StringBuilder(TextBox.Text);  
foreach (Match m in matchCollection)
{
   //do something
   .
   .
   .
   text.Replace( toreplace ,replacement);
}
TextBox.Text = text.toString();

或者,您也可以使用这些函数来搜索和替换正则表达式。只是不要在文本框上进行替换,因为每次进行替换时都必须重新绘制控件。

多线程在这里对你没有真正的帮助,因为你不能让所有这些线程访问同一个字符串来替换东西,而且创建所有这些线程的开销无论如何都会超过任何好处-你的计算机没有718核CPU!

你最好不要使用多线程。请记住,718替换操作实际上可能不会那么慢,除非字符串很大。

只需在没有线程的情况下执行替换操作-如果您想将线程添加到应用程序中,请找到一个需要几秒钟的操作,并且整个操作不涉及相同的变量。