跨线程访问控件invoke和begininvoke区别实例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void CrossDelegate(string text);
private void Done(string text)
{
textBox1.Text = text;
Thread.Sleep(2000);
}
private void SetLabel()
{
CrossDelegate dl = new CrossDelegate(Done);
string text = "test";
//BeginInvoke(dl, text); // 异步调用委托,调用后立即返回并立即执行下面的语句,其实是子线程跨线程访问主线程的控件时,为避免阻碍主线程使用,类似于异步,需要和endInvoke配合使用。
this.Invoke(dl, text); // 等待工作线程完成后, 才接着执行下面的语句.// 会阻碍主线程
MessageBox.Show("委托调用返回了", "观察委托调用的反应效果");
}
private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(SetLabel));
newThread.Start();
}
}
}

浙公网安备 33010602011771号