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();
}
}) { 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 = ; i < ; i++)
{
textBox1.Invoke(st, i.ToString());
}
}
void show(string test)
{
textBox1.Text = test;
}

控件的invoke和beginInvoke方法的更多相关文章

  1. BackGroundWorker组件使用、Winform控件的Invoke安全调用

    BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作. 可以通过编程方式创建 BackgroundWorker,也可以将它从"工具 ...

  2. [转载]Winform中Control的Invoke与BeginInvoke方法

    转自http://www.cppblog.com/baby-fly/archive/2010/04/01/111245.html 一.为什么 Control类提供了 Invoke和 BeginInvo ...

  3. delegate的Invoke和BeginInvoke方法

    C#中的控件和delegate委托方法都有Invoke和BeginInvoke方法,控件的这两个方法网上讲得很多, 这里就不多说了,下面讲一下delegate的Invoke和BeginInvoke方法 ...

  4. 多线程访问winform控件出现异常的解决方法

    一.  多线程访问winform控件出现异常的解决方法 1.  问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...

  5. HighChats图表控件显示精度小数点的方法

    相信大家对highchats这个图表控件并不陌生,最近在项目中用到它,但是某些字段需要显示为小数点,顾查找资料文档发现下面两个方式可以实现: 初始化时候添加如下两个参数 tooltip:{    fo ...

  6. C#中的BackgroundWorker控件+Delegate.Invoke (委托同步调用)

    C#中的BackgroundWorker控件+Delegate.Invoke (委托同步调用) 简单代码,记录一下.一个BackgroundWorker控件  backgroundWorkerRefr ...

  7. silverlight visifire控件图表制作——silverlight 后台方法页面事件

    1.返回事件 (1.返回silverlight页面,2.返回web页面) private void button_ClickBack(object sender, RoutedEventArgs e) ...

  8. silverlight visifire控件图表制作——silverlight 后台方法ControlChart.xaml.cs

    一.构造方法ControlChart 1.前台页面控件赋值 //时间下拉框赋值,下拉框赋选定值                for (int ii = DateTime.Today.Year; ii ...

  9. 屏蔽webbrowser控件右键的一种方法

    原文:屏蔽webbrowser控件右键的一种方法 Option ExplicitPrivate Declare Sub ZeroMemory Lib "KERNEL32" Alia ...

随机推荐

  1. Linux 网络编程详解四(流协议与粘包)

    TCP/IP协议是一种流协议,流协议是字节流,只有开始和结束,包与包之间没有边界,所以容易产生粘包,但是不会丢包. UDP/IP协议是数据报,有边界,不存在粘包,但是可能丢包. 产生粘包问题的原因 . ...

  2. 国内优秀Android学习资源

    技术博客 应用开发 博主 博客 备注 任玉刚 CSDN博客 深入Android应用开发,深度与广度兼顾 郭霖 CSDN博客 内容实用,行文流畅,高人气博主 夏安明 CSDN博客   张鸿洋 CSDN博 ...

  3. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  4. python强大的区间处理库interval用法介绍

    原文发表在我的博客主页,转载请注明出处 前言 这个库是在阅读别人的源码的时候看到的,觉得十分好用,然而在网上找到的相关资料甚少,所以阅读了源码来做一个简单的用法总结.在网络的路由表中,经常会通过掩码来 ...

  5. APP架子迁移指南(二)

    接上一篇,这一篇开始用android来解释MVP概念.八股式的架子结构和命名规范.我在准备这篇文章的时候还看到不少在MVP基础上衍生的架子思路,底子是MVP没错,但命名有区别.复杂度变了.架子也用到了 ...

  6. 移动OA,致我们终将逝去的青春(程序员版)[转]

    移动OA和致青春有什么关系,难道说赵薇也来做手机应用了?为什么不行,当年小燕子代言的打印机可是红火的很,现在再秀一把时尚手机办公也未必不可啊.言归正转,本文还是以点代面阐述移动OA开发过程,但是,它的 ...

  7. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

  8. 二叉树的建立与递归遍历C语言版

    </pre><pre name="code" class="cpp">#include <stdio.h> #include ...

  9. leetcode(一)Word Pattern

    题目描述: Given a pattern and a string str, find if str follows the same pattern. Here follow means a fu ...

  10. ES6新特性:Javascript中Generator(生成器)

    ES6的很多特性都跟Generator扯上关系,而且实际用处比较广, 包含了任何需要异步的模块, 比如ajax, filesystem, 或者数组对象遍历等都可以用到: Generator的使用: G ...