如何等待BackgroundWorker完成然后退出控制台应用程序.我有一个backgroundworker,它是从main方法开始的,但是如果我按回车键,它运行到一半就结束了,因为我在main方法中写了一个console.readkey。但我希望它等到后台工作人员完成其工作,然后退出应用程序。这是我的代码。类程序{privatestaticBackgroundWorkerworker=newBackgroundWorker();私有事件EventHandlerBackgroundWorkFinished;staticvoidMain(string[]args){worker.DoWork+=worker_DoWork;worker.RunWorkerCompleted+=worker_RunWorkerCompleted;worker.ProgressChanged+=worker_ProgressChanged;worker.WorkerReportsProgress=true;worker.WorkerSupportsCancellation=true;Console.WriteLine("正在启动应用程序...");worker.RunWorkerAsync();控制台.ReadKey();}staticvoidworker_ProgressChanged(objectsender,ProgressChangedEventArgse){Console.WriteLine(e.ProgressPercentage.ToString());}staticvoidworker_DoWork(objectsender,DoWorkEventArgse){Console.WriteLine("现在开始做一些工作......");诠释我;对于(i=1;i<10;i++){Thread.Sleep(1000);worker.ReportProgress(Convert.ToInt32((100.0*i)/10));}e.Result=i;}staticvoidworker_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){Console.WriteLine("我的价值="+e.Result.ToString());Console.WriteLine("现在完成...");请参阅如何等待BackgroundWorker取消?发布如何在BackgroundWorker和主线程之间进行通信基本上,您必须使用在DoWork结束时设置的事件来表示DoWork已完成。然后在主线程中的那个事件上使用WaitOne()。Bgw的主要目的是与WindowsMessageQueue进行交互。换句话说,它在WinForms和WPF应用程序中最有用。控制台应用程序不是使用或测试Bgw的正确位置。你会得到奇怪的结果。在关键点打印ManagedThreadId看看会发生什么。还有一些标准建议:您的worker_RunWorkerCompleted()应该检查e.Error。现在它与空的catch{}块相同。当您读取更复杂的e.Result时,现在将抛出来自DoWork的任何错误。这就是我现在所做的。但是console.readkey()不起作用。应用程序不等待ReadKey()函数。类程序{privatestaticBackgroundWorkerworker=newSystem.ComponentModel.BackgroundWorker();私有静态AutoResetEventresetEvent=newAutoResetEvent(false);staticvoidMain(string[]args){worker.DoWork+=worker_DoWork;worker.RunWorkerCompleted+=worker_RunWorkerCompleted;worker.ProgressChanged+=worker_ProgressChanged;worker.WorkerReportsProgress=true;Console.WriteLine("正在启动应用程序...");worker.RunWorkerAsync();重置事件.WaitOne();控制台.ReadKey();(对象发送者,ProgressChangedEventArgse){Console.WriteLine(e.ProgressPercentage.ToString());}staticvoidworker_DoWork(objectsender,DoWorkEventArgse){Console.WriteLine("现在开始做一些工作......");诠释我;for(i=1;iFixedit:movedresetEvent.Set()insideDoWorkinsteadofRunWorkerCompleted.由于主线程正在等待事件,因此永远不会调用Completed事件处理程序。以上就是C#学习教程:如何等待BackgroundWorker完成然后退出控制台应用程序的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
