由于读取了大数组,不要让GUI与parallel.for一起冻结

时间:2018-07-29 22:48:49

标签: c# parallel-processing parallel-for

我正在尝试从文本行为string[]的TextBox中获取大字符串文本数组。

它可以工作,但是问题在于,在输入大量数据的情况下,程序的GUI被冻结了片刻,同时它处理了整个数组的大小(与异步函数不同,异步函数不会让GUI滞后)。避免冻结?我正在尝试将并行用于,但结果似乎相同...我该如何解决?

string[] text = textBox.Lines;

if (textBox.Lines.Length > 0)
{
    Parallel.For(0, textBox.Lines.Length, x =>
    {
        text[x] = textBox.Lines[x];
    });
}

已修复:

string[] text = textBox.Lines;

if (text.Length == 0)
{
    MessageBox.Show("Insert lines", "Error");
}

1 个答案:

答案 0 :(得分:3)

问题是您在循环中使用TextBox.Lines属性。您根本不需要执行此操作,因为Lines属性每次访问时都会重新创建一个新的字符串数组。只需获取Lines属性,就可以完成。您无需在UI线程上逐行复制它。

 string[] text = textBox.Lines; //Done.

要验证它是否如我所描述的那样工作,请查看源代码:https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/TextBoxBase.cs,37cabfde1449b18f,references