使用Backgroundworker的正确方法

时间:2013-05-13 12:08:23

标签: c# winforms backgroundworker disposing

我正在使用背景工作来显示加载屏幕。

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的正确方法吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

以下是一些可以帮助您获得所需内容的精彩文章:

C# BackgroundWorker Tutorial

BackgroundWorker Class Sample for Beginners

BackgroundWorker and ProgressBar demo

Backgroundworker example

希望这有帮助!