【发布时间】:2021-07-14 06:36:01
【问题描述】:
我正在学习异步/等待,我创建了一个对我不起作用的小例子。我想以并行方式更改文本道具。有可能吗?
错误提示“'跨线程操作无效:控件'textBox1'从创建它的线程以外的线程访问”。
private async void DeleteAsync()
{
var tasks = new List<Task>();
var list1 = new List<Control>();
var list2 = new List<Control>();
list1.Add(textBox1);
list1.Add(textBox2);
list2.Add(textBox3);
list2.Add(textBox4);
tasks.Add(Task.Run(() => ChangeText(list1)));
tasks.Add(Task.Run(() => ChangeText(list2)));
await Task.WhenAll(tasks);
Console.Write("enddd");
}
private void ChangeText(List<Control> lst)
{
foreach (var ctrl in lst)
{
ctrl.Text = "22";
}
}
非常感谢!
【问题讨论】:
-
查看标记的重复项。那里进行了广泛的讨论,以及涉及“跨线程操作无效”异常的任何其他现有问题,这将告诉您线程与 UI 对象的交互如何工作。跨度>
-
重新开放; duplicate question 已有十多年的历史,所有投票最多的答案都推荐了非常过时的技术,例如
Invoke/BeginInvoke。
标签: c# .net multithreading async-await