Soh*_*pta 18 .net c# multithreading backgroundworker
我已经编写了一个示例控制台应用程序来使用Stackoverflow中发布的示例之一来测试backgroundworker.我有一个backgroundworker,它以main方法开头,但是如果我按下回车键,它会在操作过程中结束,因为我在main方法中写了一个console.readkey.但是我希望它等到后台工作者完成工作然后退出应用程序.这是我的代码.
class Program
{
private static BackgroundWorker worker = new BackgroundWorker();
private event EventHandler BackgroundWorkFinished;
static void Main(string[] args)
{
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.ProgressChanged += worker_ProgressChanged;
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
Console.WriteLine("Starting Application...");
worker.RunWorkerAsync();
Console.ReadKey();
}
static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine(e.ProgressPercentage.ToString());
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("Starting to do some work now...");
int i;
for (i = 1; i < 10; i++)
{
Thread.Sleep(1000);
worker.ReportProgress(Convert.ToInt32((100.0 * i) / 10));
}
e.Result = i;
}
static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("Value Of i = " + e.Result.ToString());
Console.WriteLine("Done now...");
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅如何等待BackgroundWorker取消?发布如何在BackgroundWorker和主线程之间进行通信.
基本上,您必须使用在DoWork结束时设置的事件来表示DoWork已完成.然后在主线程中的那个事件上等待WaitOne().
| 归档时间: |
|
| 查看次数: |
67173 次 |
| 最近记录: |