我想补充项目的大数目的ListBox
首先我定义它抱到了特定
项目对象添加到列表框项集合
这是实现基于任务的异步方法的正确方法吗?
delegate void D();
然后匿名方法的引用委托我写异步方法
private async void AddAsync()
{
await Task.Run(() =>
{
for (int i = 0; i < 40000; i++)
{
D r = new D(() => this.listBox1.Items.Add(i));
this.listBox1.Invoke(r);
}
}
);
}
这是实施TAP的正确方法吗?
我犯了一个错误吗?
从性能的角度来看,你能提出一个更好的逻辑吗?或者这已经足够好了
有40,000个项目的列表框?我不确定这是否会飞,但如果坚持我认为最好创建一个任务,将40,000个项目添加到列表框中,而不是创建40,000个任务,每个任务将单个项目添加到列表框中。 –
哦,我犯了一个大错,我编辑了方法,谢谢 –
从性能的角度来看,这可能是你能做的最糟糕的事情。正如Martin所说,由于您正在更新必须在UI线程上完成的UI,因此在UI线程的单线程循环中执行此操作会更有效率。在UI环境中,一般来说,当这些长时间运行的操作的结果可用时,您希望将长时间运行的非UI相关**任务转移到后台,并且只在UI线程上调用它们,但在更新这种UI时,您最好在主线程中完成,而不是创建40,000个任务来完成它。 – kha