有一段执行很慢的程序,就比如说是9999999次的一个循环.执行的时候窗体会死掉.
在窗体上加一个进度条.把这段程序扔到线程里去执行.
但是线程结束时,我要给个提示,告诉我已完成.然后把进度条关掉.
但是在子线程中无法操作主线程上的控件.
我对控件Invoke添加委托,在线程里执行.又会变成执行时窗体死掉的情况,等于跟没用线程一个样.
请问该如何处理.

解决方案 »

  1.   

    所谓Invoke是给窗体线程发一条消息告诉它做啥事.而你这里有9999999次循环,
    如果你每次循环都Invoke一下;并且这循环还很短;那窗体线程会收到大量密集的
    Invoke消息要处理根本无心处理用户输入绘制图像等其它消息.所以会造成窗体假
    死.至于解决方法...看具体情况,如果循环执行的很快每执行1~200次Invoke一下.
    如果不是很快每10~20次Invoke一下.
      

  2.   

    Application.DoEvents()
    http://topic.csdn.net/u/20090712/03/ceb0be3d-38e5-4070-96b6-40086ae617d7.html?56385
      

  3.   

    其实我编的不是一个循环,只是处理数据库中大量数据,要等的时间很久,为了给用户一个友好的显示,所以想加个进度条.Invoke应该只调用一次.但是,一执行,窗体就白掉了.啥也不显示,等数据处理完,直接蹦个完成给我,进度条根本就不显示.中间的处理过程,就是个假死.连窗体都不显了.