异步调用方法
本文关键字:方法 调用 异步 | 更新日期: 2023-09-27 18:13:41
是否有任何简单的方法来异步调用我现有的void方法,使我的表单立即显示而无需等待该方法结束?
该方法读取包含近20000个文件的目录到数组,并将其填充到ListView中。
你可以在一个新线程中运行你的代码,这样它就不会阻塞UI线程,这是非常简单的使用TPL
Task.Run(() =>
{
// enumerate files
return files;
}).ContinueWith(t =>
{
var files = t.Result;
// update list view
}, TaskScheduler.FromCurrentSynchronizationContext());
您可以使用Task,但也可以返回结果,并使用async/await或使用dispatcher来更新UI。
try
{
var result = await Task.Run(() => GetResult());
// Update UI: success.
// Use the result.
listView.DataSource = result;
listView.DataBind();
}
catch (Exception ex)
{
// Update UI: fail.
// Use the exception.
}
看这个
尝试以下方法
private delegate void AddItem(string item);
private AddItem addListItem;
private void form_load()
{
new System.Threading.Thread(new ThreadStart(this.FillItems)).Start();
}
private void FillItems()
{
addListItem = new AddItem(this.addItem);
///Fill your list here
this.Invoke(addListItem, "ABC");
this.Invoke(addListItem, "XYZ");
this.Invoke(addListItem, "PQR");
}
private void addItem(string item)
{
listView1.Items.Add(item);
}