Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();

 
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。
 

例如:

举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..

 using System.Threading;
namespace test
{
public partial class Form1 : Form
{ public Form1()
{
InitializeComponent();
} ①//更新窗体中的TextBox1显示内容的方法 public void UpdateForm(string param1,string parm2)
{
this.textBox1.Text = param1+parm2;
} ②//声明委托 public delegate void UpdateForm_dl(string str1, string str2); ③//调用委托 private void Calldelegate() { /*在Windows窗体应用程序中使用this.Invoke 在WPF应用程序中使用this.Dispatcher.Invoke*/ this.BeginInvoke(new UpdateForm_dl(UpdateForm), new object[] { "我是文本框", "haha" }); //this.Dispatcher.BeginInvoke(new UpdateForm_dl(UpdateForm), new object[] { "我是文本框", "haha" }); } ④//创建新线程 private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWork));
thread.Start();
} ⑤//新线程入口 public void DoWork() {
Calldelegate();
} }
}

注意代理的使用!

最新文章

  1. 【转】STM32中的抢占优先级、响应优先级概念
  2. JUnit 简介
  3. Android IOS WebRTC 音视频开发总结(七九)-- WebRTC选择H.264的四大理由
  4. MySQL深入利用Ameoba实现读写分离
  5. java读取各类型的文件
  6. [Js/Jquery]天气接口简单使用
  7. aix-裸设备文件大小查看
  8. java中集合类的简介
  9. Java 中的resultset详解
  10. Objective-C KVC 自己主动转换类型研究
  11. 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
  12. css相关tips
  13. [BZOJ1053] [HAOI2007] 反素数ant (搜索)
  14. [LeetCode] Construct Binary Tree from String 从字符串创建二叉树
  15. 协议系列之IP协议
  16. python面向对象中的一些特殊__方法__
  17. 「Fluent Python」今年最佳技术书籍
  18. mac下最简单的删除node方法是什么
  19. Java NIO系列教程
  20. JVM总结-Java 虚拟机是怎么识别目标方法(上)

热门文章

  1. Load resources from classpath in Java--reference
  2. android开发之bitmap使用
  3. SQL带参数拼接
  4. Django 初探--Django的开发服务器及创建数据库(笔记)
  5. 程序员带你十天快速入门Python,玩转电脑软件开发(一)
  6. LA 4329(树状数组)
  7. python 简明教程笔记
  8. webrtc学习———记录二:canvas学习
  9. javascript 中状态改变触发事件
  10. 如何下载到最新的版本的Oracle Database