繁体   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