日期:2014-05-18  浏览次数:20936 次

C#中如何使用BackgroundWorker组件?
上网查阅了一些资料,看不懂这个组件的使用思路,不懂如下:

1.我想实现在主界面form出来之前,出现一段“加载中...”的图像界面,避免UI假死现象。

2.我使用的是VS2008 C#,照理说,这个BackgroundWorker组件是form.cs中加进去的,可我本来是想让BackgroundWorker出现在form出来之前,这不很矛盾!

3.或许应该加在program.cs里,用 System.ComponentModel.BackgroundWorker也能加进去,可如何使用呢?

4.能否简单的描述下BackgroundWorker组件下的三个事件:DoWork,ProgressChanged,RunWorkerCompleted。(网上找的资料对他们的描述看得都有点朦胧)

5.如何结合多线程,让BackgroundWorker在form未出来之前出现,在form出来之后消失?(只求思路)

6.谢谢,非常感谢!



------解决方案--------------------
这个很容易解决,首先你要有一个"加载中"窗体,把主界面的加载过程放到一个单独的线程中去执行,用线程委托,在加载完成之后通知"加载中"窗体,让窗体隐藏,把主窗体显示出来就可以了
------解决方案--------------------
backgroundworker.IsBusy 
http://topic.csdn.net/u/20080819/14/FB3E8F50-A6D0-46EF-8AE5-07E955887C4E.html
http://topic.csdn.net/u/20090629/10/bfd1a780-6d39-46c3-a5c5-c12f0417615f.html
------解决方案--------------------
bg 控件有3个事件 就在这3个事件里搞事 就对了

1, 事件 DoWork 里做事(比如耗时的事情),并调用 ReportProgress(。。。);这个方法
报告进度条进度值。
2 在事件 ProgressChanged 里面动态显示进度条
3,在RunWorkerCompleted 事件里提示事情做完

最后用RunWorkerAsync()这个方法启动控件。
------解决方案--------------------
1.看你的逻辑,如果在窗体初始化的时候有很多事情要做,最好弄个Loading窗体,就像VS打开时候你看到的一样。

2.用Loading窗体解决。

3.不应该。

4.看MSDN,没人能比MSDN说的详细了。

5.如果使用多线程你可以不必使用backgroundworker。

6.不客气
------解决方案--------------------
http://blog.csdn.net/cc_net/archive/2009/11/10/4796109.aspx
------解决方案--------------------
System.ComponentModel.BackgroundWorker不一定非要在winform里用
我经常在Console里用
它的作用就是异步,和委托异步一样,不过BackgroundWorker功能更多,(支持动态取消异步操作和报告进度)
DoWork就是异步要做的方法,即你调用BackgroundWorker实例的RunWorkerAsync()方法后调用的事件
ProgressChanged进度变化事件,
RunWorkerCompleted异步完成时执行的事件