首页 > 其他 > 详细

控件的invoke和beginInvoke方法

时间:2019-10-11 12:53:33      阅读:58      评论:0      收藏:0      [点我收藏+]

System.Windows.Forms.Timer 的timer是在主线程上执行的,因此在timer的tick事件中操作界面上的控件不会发生线程的安全性检测。

Control的invoke和begininvoke方法的比较:

 invoke方法:使用Invoke完成一个委托方法的封送,就类似于使用SendMessage方法来给界面线程发送消息,是一个同步方法。

技术分享图片
private delegate void InvokeDelegate();

private void InvokeMethod()

{    //C代码段 }

private void butInvoke_Click(object sender, EventArgs e)

{   

 //A代码段.......   

 this.Invoke(new InvokeDelegate(InvokeMethod));  

  //B代码段......

}
技术分享图片

invoke执行的顺序是A->C->B

beginInvoke异步方法。

技术分享图片
Control的BeginInvoke private delegate void BeginInvokeDelegate();

 private void BeginInvokeMethod()

{   

//C代码段

}

 private void butBeginInvoke_Click(object sender, EventArgs e)

{   

 //A代码段.......   

 this.BeginInvoke(new BeginInvokeDelegate(BeginInvokeMethod));   

 //B代码段......

}
技术分享图片

begininvoke执行的顺序是A->B->C

下面列出几种control的invoke方法使用:

1) Action的lambda方法的使用

Control.invoke(new Action(()=>{.....;}));

 

技术分享图片
  new Thread(() =>
            {
                while (true)
                {
                    label1.BeginInvoke(new MethodInvoker(() => { label1.Text = System.DateTime.Now.ToString(); }));
                    Thread.Sleep(1000);
                }
            }) { IsBackground = true }.Start();
技术分享图片

 

2)实例委托

技术分享图片
private delegate void ChangeTxt();
     void time_Elapsed(object sender,System.Timers.ElapsedEventArgs e)
        {
            ChangeTxt changetxtDelegate=new ChangeTxt(change);
            textBox1.Invoke(changetxtDelegate);
//或者直接textBox1.Invoke(new ChangeTxt(change));

}

private void change() { textBox1.Text = (a++).ToString(); }
技术分享图片

3)传参数

技术分享图片
 private delegate void showtest(string text);
 private void run()
        {
            showtest st = new showtest(show);
            for (int i = 0; i < 100000; i++)
            {
                textBox1.Invoke(st, i.ToString());
            }
        }
void show(string test)
        {
            textBox1.Text = test;
        }

控件的invoke和beginInvoke方法

原文:https://www.cnblogs.com/wwwbdabc/p/11653295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!