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