2013-05-13 58 views
1

我使用的背景工作显示加载屏幕。使用Backgroundworker的正确方法

的DO-事件看起来如下:

private void bwLoadingScreen_DoWork(object sender, DoWorkEventArgs e) 
{ 
      _ls = new LoadingScreen(); 
      _ls.Show(); 
      while (!bwLoadingScreen.CancellationPending) 
      { 
       Application.DoEvents(); 
      } 
} 

我用下面的代码处置Loadingscreen:

if (_ls.InvokeRequired && !_ls.IsDisposed) 
      { 
       Invoke(new MethodInvoker(delegate 
        { 
         _ls.Close(); 
         _ls.Dispose(); 
        })); 
      } 
      else if (!_ls.IsDisposed) 
      { 
       _ls.Hide(); 
       _ls.Dispose(); 
      } 

我应该使用RunWorkerCompleted事件的呢? 这是使用Backgroundworker的正确方法吗?

回答

4

我觉得你正在做这个有点倒退。 Backgroundworker应该在您的主进程显示当前表单并且可能更新它时进行工作。当backgroundworker完成加载数据时,它应该在backgroundworker事件'RunWorkerCompleted'的主线程中处理它。

这也将简化您的代码,因为您在关闭或隐藏表单之前不需要调用。

我希望这能回答你的问题。 //翻转