-2

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

它可以工作,但问题是在输入大量数据时,程序的 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");
}
4

1 回答 1

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

于 2018-07-29T23:09:21.423 回答