我正在尝试从文本行为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");
}
答案 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