namespace ThreadDemo
{
public partial class Form2 : Form
{
private Thread beginInvokeThread;
private delegate void beginInvokeDelegate();
private delegate void WriteMsg(string msg);
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//A代码段.......
FunctionA();
beginInvokeThread = new Thread(new ThreadStart(StartMethod));
beginInvokeThread.Start();
//B代码段......
FunctionB();
}
private void StartMethod()
{
//Invoke() 和BeginInvoke()区别:
//BeginInvoke异步执行,代码会同时执行C,不会等待D方法执行完毕后才执行
//invoke():等待D执行完毕后,才执行后面方法C
this.richTextBox1.BeginInvoke(new beginInvokeDelegate(beginInvokeMethod));
//C代码段......
FunctionC();
}
private void beginInvokeMethod()
{
//D代码段
for (int i = 1; i <= 10;i++ )
{
this.richTextBox1.AppendText(+i + "执行了D方法;\n");
}
}
private void FunctionA()
{
this.richTextBox1.AppendText("执行了A方法;\n");
}
private void FunctionB()
{
this.richTextBox1.AppendText("执行了B方法;\n");
}
private void FunctionC()
{
//从不是创建控件“richTextBox1”的线程访问它, 所以在这只能通过委托来执行它
//this.richTextBox1.AppendText("执行了C方法;\n");
//WriteMsg m = new WriteMsg(SetRichText);
//this.richTextBox1.Invoke(m, new object[] { "执行了C方法;\n" });
MessageBox.Show("执行了C方法;");
}
private void SetRichText(string msg)
{
for (int i = 1; i <= 100; i++)
{
this.richTextBox1.AppendText(+i+msg);
}
}
}
}
Invoke() 和BeginInvoke()区别
最新推荐文章于 2025-03-11 19:15:00 发布