我在WinForms
中搜索了许多用于异步更新UI控件的示例,并且大多数示例都有大量代码。有没有办法让这更容易?我觉得他们此时工作太多了。
我见过人们这样做:
await Task.Run(() =>
{
doSomething();
});
但我听说这很糟糕并且无法正常工作,我不喜欢用多个await Task.Run(()=> {});
实例来编写我的UI代码。我已经看到了大量关于背景工作者的例子。
有没有更好的方法可以做到这一点,不需要太多的样板代码?
答案 0 :(得分:0)
我喜欢使用一种方法:
创建一个调用操作的控件扩展名:
public static void Update(this Control ctrl, Action a)
{
if (ctrl.InvokeRequired)
{
ctrl.BeginInvoke(new MethodInvoker(a), null);
}
else
{
a.Invoke();
}
}
然后将其称为:control.Update(()=> { /* code to update control */ });
例如:
listView1.Update(() =>
{
ListViewItem lvi = new ListViewItem("something");
lvi.SubItems.Add("something else");
listView1.Items.Add(lvi);
});