簡體   English   中英

異步調用方法

[英]Calling method asynchronously

有沒有一種簡單的方法可以異步調用我現有的void方法,從而使表單立即顯示而無需等待該方法結束?

該方法讀取包含將近20000個文件的目錄的數組,並將其填充到ListView。 第一次運行時將花費近十秒鍾,而Windows尚未對其進行緩存。

您可以在新線程中運行代碼,這樣它就不會阻塞UI線程,使用TPL做到這一點很簡單

Task.Run(() =>
{
    // enumerate files
    return files;
}).ContinueWith(t =>
{
     var files = t.Result;
     // update list view
}, TaskScheduler.FromCurrentSynchronizationContext());

您可以使用Task,也可以返回結果,並使用async / await或使用分派器來更新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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM