Invoke在线程中等待Dispatcher调用指定方法,完成后继续下面的操作。
BeginInvoke不必等待Dispatcher调用制定方法,直接继续下面的操作。
这两个方法最常用的场合是:多线程环境下更新控件。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// 委托
delegate void MyDelegate(int x);
public Form1()
{
InitializeComponent();
// 启动一个后台线程
System.Threading.Thread t =
new System.Threading.Thread(MyThread);
t.IsBackground = true;
t.Start();
}
void MyMethod(int x)
{
label1.Text = x.ToString();
}
void MyThread()
{
int x = 0;
// 实例化委托
MyDelegate md = MyMethod;
// 线程循环
while (true)
{
x++;
// 利用Invok,调用委托 md, 在label1上显示x的值
label1.Invoke( md, x);
// 也可以调用BeginInvok
// label1.BeginInvoke(md, x);
// 休眠1秒钟
System.Threading.Thread.Sleep(1000);
}
}
}
}