我想从另一个线程更新UI,
我有很多选择可以在UI Thread上下文中执行代码:
1:使用BeginInvoke / EndInvoke方法:
伪代码
public delegate int AddItem(object Item);
public Form1 F = (Form1)Application.OpenForms["Form1"];
private static async DoSomething()
{
AddItem ad = new AddItem(F.ls1.Items.Add);
await Task.Run(() =>F.EndInvoke(F.BeginInvoke(add,"NewItem")));
}
2:使用Progress / IProgress:我不知道如何实现
还有其他方法吗?哪个是首选方式?
注意:调用Task的线程与UI线程不同,因此Progress在这里可能无法正常工作
IMO,您正在使它变得过于复杂:
F.Invoke((MethodInvoker)delegate { F.ls1.Items.Add("NewItem"); });
会很好地工作。你需要的async
吗?我认为您不会这样做,因为这不太可能是一项昂贵的操作:仅为此目的释放工作线程并没有太大好处。
注意:个人而言,如果F
直接封装更多这些内容,我更喜欢它;请注意;例如:
F.Invoke((MethodInvoker)delegate { F.AddCategory("NewItem"); });
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句