c# - 不要因为读取大数组而让 GUI 冻结为 parallel.for
问题描述
我正在尝试从行所在的 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");
}
解决方案
问题是您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
推荐阅读
- bootstrap-4 - 无法访问我的 html 文档上的日期选择器
- r - 删除“_”之前的所有字符
- python - 通过命令行参数将参数传递给 pytest.mark.parametrize
- java - 从 actionListener 中绘制一个圆圈
- swift - iOS 并发:如何使用 OperationQueue 而不是屏障?
- javascript - 我们可以在 React 中为组件使用任何访问修饰符吗?
- jquery - 在按键上检查电话号码的正则表达式
- python - 列值与另一个表的列名之间的 SQLAlchemy 关系?
- javascript - vue生成表单json数据截断标签
- activesupport - 如何修复 Npm Brainly-scraper Captcha 中的错误?