【发布时间】:2018-05-18 21:55:37
【问题描述】:
我正在使用任务并行库在 c# 上构建一个记事本应用程序,但是当我应用搜索功能时,整个 UI 都会卡住。我尝试调用该方法,但仍然没有帮助。以下是搜索功能。
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
Parallel.For(0, GetRichTextBox().Text.LastIndexOf(toolStripTextBox1.Text) + 1, (int i) =>
{
GetRichTextBox().Find(toolStripTextBox1.Text, i, GetRichTextBox().TextLength, RichTextBoxFinds.None);
GetRichTextBox().SelectionBackColor = Color.Orange;
i = GetRichTextBox().Text.IndexOf(toolStripTextBox1.Text, i) + 1;
});
}
以下代码是GetRichTextBox方法。
public RichTextBox GetRichTextBox()
{
Invoke(new MethodInvoker(delegate ()
{
TabPage tp = tabControl1.SelectedTab;
if(tp!= null)
{
rtb = tp.Controls[0] as RichTextBox;
}
}));
return rtb;
}
【问题讨论】:
-
Parallel.For 本身不在另一个线程中运行。此外,尝试在后台执行 UI 工作几乎总是涉及调用在 UI 线程上运行的
Invoke,因此在性能方面没有任何收获。 -
我知道,但这是我的任务的要求:/
标签: c# winforms task-parallel-library