Tag: backgroundworker

如何停止BackgroundWorker窗体的closures事件?

我有一个窗体,产生一个BackgroundWorker,应该更新窗体自己的文本框(主线程),因此Invoke((Action) (…)); 呼叫。 如果在HandleClosingEvent我只是做bgWorker.CancelAsync()然后我得到ObjectDisposedException Invoke(…)调用,可以理解的。 但是,如果我坐在HandleClosingEvent和等待bgWorker完成,比.Invoke(…)永远不会返回,也可以理解。 任何想法如何closures此应用程序没有得到例外,或死锁? 以下是简单的Form1类的3个相关方法: public Form1() { InitializeComponent(); Closing += HandleClosingEvent; this.bgWorker.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (!this.bgWorker.CancellationPending) { Invoke((Action) (() => { this.textBox1.Text = Environment.TickCount.ToString(); })); } } private void HandleClosingEvent(object sender, CancelEventArgs e) { this.bgWorker.CancelAsync(); /////// while (this.bgWorker.CancellationPending) {} // deadlock }

如何使用WPF的后台工作

我是WPF的初学者,在我的应用程序中,我需要执行一系列的初始化步骤,这些需要7-8秒才能完成,在这个过程中,我的UI变得没有反应。 为了解决这个问题,我在一个单独的线程中执行初始化: public void Initialization() { Thread initThread = new Thread(new ThreadStart(InitializationThread)); initThread.Start(); } public void InitializationThread() { outputMessage("Initializing…"); //DO INITIALIZATION outputMessage("Initialization Complete"); } 我已经阅读了关于BackgroundWorker的一些文章,以及它如何让我保持我的应用程序响应,而不必写一个线程来执行冗长的任务,但我没有尝试实现它的任何成功,谁能告诉我如何使用BackgroundWorker做到这一点? 谢谢,Eamonn