在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。由于操作是异步执行的,用户可能在异步操作执行过程中关闭当前窗体,而窗体的关闭会伴随着Dispose方法的执行。如果我们注册了BackgroundWorker的RunWorkerCompleted事件,并且在该事件处理程序中需要操作这个被Disposed的窗体,就会出现一些无法预知的异常。

我们写一个简单的例子来说明上述的场景:在一个非主窗体(主窗体的关闭会导致程序的终止)的Windows窗体中,一个BackgroundWorker被用于异步地执行一段耗时的操作。在我们的例子中,通过让线程休眠10秒来模拟这个“耗时操作”。方法backgroundWorker_RunWorkerCompleted是BackgroundWorker的RunWorkerCompleted事件处理方法,在这里我们通过MessageBox来显示当前窗体的IsDisposed属性值。注册到该BackgroundWorker的异步操作通过点击某个按钮开启。相关的代码如下所示。

class BgwForm : Form
   2: {
public BgwForm()
   4:     {
   5:         InitializeComponent();
   6:     }
   7:  
object sender, DoWorkEventArgs e)
   9:     {
  10:         Thread.Sleep(10000);
  11:     }
  12:  
object sender, EventArgs e)
  14:     {
this.backgroundWorker.RunWorkerAsync();
  16:     }
  17:  
object sender, RunWorkerCompletedEventArgs e)
  19:     {
this.IsDisposed));
  21:     }
  22: }

相关文章:

  • 2021-11-19
  • 2021-07-24
  • 2022-02-28
  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
  • 2021-04-07
猜你喜欢
  • 2022-12-23
  • 2021-12-06
  • 2021-11-11
  • 2022-12-23
  • 2021-12-25
  • 2021-12-24
相关资源
相似解决方案