none
timer中跨线程调用控件invoke RRS feed

  • 问题

  • 偶一个控件画图的。偶想实现,它不断的去根据数据库更新图形。
    至于怎么具体更新图形就忽略了,现在遇到的问题如下:

            public PlotControl()
            {
                   在构造函数中,定义了一个timerFresh = new System.Threading.Timer(timerFresh_Elapsed, 3, 0, 1000);
            }

    然后在timer里,对控件进行更新zgc.Refresh()这一句。
    因为是跨线程,所以用了invoke来弄
    但是,有警告:
    【在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。】

     void timerFresh_Elapsed(object sender)
    {
                if (zgc.InvokeRequired && zgc.IsHandleCreated )
                {
                    this.Invoke(new Action(delegate{zgc.Refresh();}));
                   
                }
            }
    }

    2009年9月21日 6:40

答案

  •             if (zgc.InvokeRequired && zgc.IsHandleCreated )
                {
                    zgc.Invoke(new Action(delegate{zgc.Refresh();})); // this. 改为 zgc.
                                }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 阿朵 2009年9月24日 3:48
    2009年9月21日 7:09
    版主
  • 你好!
         你这样试试:
          void timerFresh_Elapsed(object sender)
    {
                if (zgc.InvokeRequired && zgc.IsHandleCreated )
                {
                    IntPtr handle=this.Handle;   //强制创建句柄
                    this.Invoke(new Action(delegate{zgc.Refresh();}));
                   
                }
            }
    }
    周雪峰
    • 已标记为答案 阿朵 2009年9月24日 3:48
    2009年9月21日 10:32
    版主

全部回复

  •             if (zgc.InvokeRequired && zgc.IsHandleCreated )
                {
                    zgc.Invoke(new Action(delegate{zgc.Refresh();})); // this. 改为 zgc.
                                }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 阿朵 2009年9月24日 3:48
    2009年9月21日 7:09
    版主
  • 你好!
         你这样试试:
          void timerFresh_Elapsed(object sender)
    {
                if (zgc.InvokeRequired && zgc.IsHandleCreated )
                {
                    IntPtr handle=this.Handle;   //强制创建句柄
                    this.Invoke(new Action(delegate{zgc.Refresh();}));
                   
                }
            }
    }
    周雪峰
    • 已标记为答案 阿朵 2009年9月24日 3:48
    2009年9月21日 10:32
    版主
  • 谢谢~果然是那个this写错了。~
    2009年9月24日 3:48