我在窗体中执行一个过程,该过程比较耗时间,这期间对窗体动作都没有反映,我用了Application.DoEvents();也不行

解决方案 »

  1.   

    是在循环中吗?不是循环的话,DoEvents没用Application.DoEvents();加在哪里的?
      

  2.   

    private void timer1_Tick(object sender, System.EventArgs e)
    {

    if(bRed)
    {
    //this.LocateFeatureWithColorEvent(selFeature,false,true,255  );
    this.ClearSelectedEvent();
    bRed=false;
    }
    else
    {
    this.DisplayLine();
    bRed=true;
    }


    Application.DoEvents();

    }加载定时器中,this.DisplayLine();这个过程比较花时间,造成界面上其他按钮都不能点击了
      

  3.   


    这样没有用的,要加在耗时间的过程内部,而且要在循环内部
    当过程执行的时候,是不会处理消息的,除非你每隔一段时间(很短的)
    就放弃CPU,让系统处理一下消息
      

  4.   

    DoEvents就是交出控制权给操作系统,使其处理当前在消息队列中的所有Windows消息
      

  5.   

    界面用线程也不要紧。
    执行界面元素刷新时,先判断是否线程冲突,然后调用相关窗体的Invoke就可以了。
      

  6.   

    我今天在循环里用doevents了 不过运行一会就堆栈错误什么的,程序自动退出
      

  7.   

    使用线程,性能会有所改善;
    using System.Threading;
    T1 = new Thread(new ThreadStart(YourMethod));
      

  8.   

    学习中.欢迎加入ASP.NET(C#)学习交流QQ群号:32801051
      

  9.   

    这种情况只能使用线程啦
    doevent是没有用的