不要让 GUI 由于读取大数组而冻结 parallel.for

Don't let GUI freeze with parallel.for due to the reading of a big array

我正在尝试从行为 string[].

的文本框中获取一个大字符串文本数组

它可以工作,但问题是当输入大量数据时,程序的 GUI 在处理整个数组大小时会冻结片刻(不同于不让 GUI 滞后的异步函数).为了避免冻结?我正在尝试使用 parallel for 但结果似乎是一样的...我该如何解决这个问题?

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");
}

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

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

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