using (Region invReg = new Region(m_ShowRegion))
     {
          //this.Invoke(new Action<Region>(this.Invalidate), invReg);
          this.Invalidate(invReg);
     }上述代码由不同的线程调用,如果执行this.Invalidate(invReg);就会报错“不是在所创的线程中....”。
如果用this.Invoke(new Action<Region>(this.Invalidate), invReg);就会连界面都不显示。
这个程序是由软件从不同串口同时采集数据,并刷新绘图界面。所以用到了多线程刷新界面。请问大家该如何多线程刷新界面?

解决方案 »

  1.   

    http://www.cnblogs.com/wuhenke/archive/2009/12/12/1622624.html
      

  2.   

    你好,上述文档没有解决我要问的问题,我确实用的是Invalidate方法
      

  3.   

    如果用this.Invoke(new Action<Region>(this.Invalidate), invReg);就会连界面都不显示。
    ---------------
    ?
      

  4.   

    在线程里置标志位,在timer事件里刷新。我经常这么做。
      

  5.   

    多线程里发送wm_paint消息
    invalidate也是发送wm_paint
      

  6.   

    哦,我知道原因了,是自己代码的问题,有个地方死锁了,造成界面没有显示出来。
    this.Invoke(new Action<Region>(this.Invalidate), invReg);
    用这个可行。