[英]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.