你们有谁用过BackgroundWorker之后死机的现象么,我现在的情况是这样的,有一个自定义的进度条,一个FORM而已,上边仅仅是一个动态的GIF图片和一些文字,我在我的winform上用backgroundworker去show这个进度条form,show出来了,都没问题,然后完成之后这个from就被close掉了,问题就出现在下边,把任务管理器弄出来,然后点关机点切换用户,然后会到windows用户登录界面,选择用户之后在进去,我的winform就进入假死状态了,就是随便找个窗口在上面滑动都是花的,相信大家都能理解
但是我自己用THREAD开一个新线程,是同样的代码,同样的方法show出进度条form,这样是没有问题的,只不过把backgroundworker的dowork里面的东西放到了我开辟的子线程里去运行了,理论上应该没有区别啊,但为什么backgroundworker就会出现死机呢不要和我说那就用THREAD吧
经理说backgroundworker更好一点,让我用backgroundworker来做
麻烦大侠们帮帮忙

解决方案 »

  1.   

    在DoWork中做长时间运行的工作,但要更新界面,需要在ProgressChanged、RunWorkerCompleted里进行。
    下面是BackgroundWorker应用实例,但愿对你有帮助
    http://blog.csdn.net/sxldfang/archive/2010/04/25/5527456.aspx
      

  2.   


    backgroundworker 的 ProgressChanged 是在创建线程触发的,跟 Thread 的不一样。所以你若照搬 Thread 的代码, 出问题一点都不奇怪。再者,若你在后台线程上面动了 Control 之类的东东,结果将不能预测。
      

  3.   

    具体要看代码。BackGroundWork实质上也是封装了Thread的,两个个实质上是没有太大区别的,bgw对Thread做了封装,用起来更方便。
    “在DoWork中做长时间运行的工作,但要更新界面,需要在ProgressChanged、RunWorkerCompleted里进行。”因为跨线程的UI控件访问是被视为不安全的,所以使用这两个事件(委托或回调函数)来处理.
      

  4.   

    那为什么用backgroundworker会出现问题,我用Thread做没有问题呢?我觉得还是有些不一样的机制的