簡體   English   中英

C#方法中的線程化

[英]C# Threading in a method

我有以下方法:

public List<string> someMethod()
{

   // populate list of strings
   // dump them to csv file
   //return to output
}

問題是:我不希望用戶等待csv轉儲,這可能需要一段時間。 如果我使用csvdump的線程,它會完成嗎? 在輸出返回之前或之后?

csvdump完成后,id喜歡通知另一個類來處理csv文件。 someMethod不需要等待csvdump完成?

是一篇關於C#線程的優秀文章,任何想要了解C#線程的人都應該閱讀。

但對於你的情況,我會做這樣的事情:

class Program {
  static BackgroundWorker bw;
  static void Main() {
    bw = new BackgroundWorker();
    bw.WorkerSupportsCancellation = true;
    bw.DoWork += bw_DoWork;
    bw.RunWorkerCompleted += bw_RunWorkerCompleted;

    bw.RunWorkerAsync ();
  }

  static void bw_DoWork (object sender, DoWorkEventArgs e) {
    //Run your code here
  }

  static void bw_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e) {
    //Completed
  }
}

如果該過程可能需要一些時間,您可以讓BackgroundWorker報告它的進度。

如果您不希望用戶等待操作完成,則調用異步調用。

Asynchronus調用遵循我建議你使用的.NET模式

這種調用涉及(通常)使用ThreadPool在后台執行操作,然后在操作完成時調用給定的回調。 你可以在這個回調中做一些事情(由線程執行)。

此模型要求用戶知道該過程是異步的。 這對於99%的情況來說實際上是一件好事,因為你需要能夠告訴調用代碼該任務還沒有,你可以立即返回控件,但這並不意味着工作已經完成。

如果您是從WinForms或WPF UI執行此操作,則可以使用BackgroundWorker執行CVS轉儲,該轉儲可以在后台線程中執行,並在完成后將事件發送到UI。

暫無
暫無

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

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