Bootstrap

python子线程调用主线程的控件显示_C#中Invoke的用法()-解决子线程访问主线程控件、线程安全等问题...

一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。

首先说下,invoke和begininvoke的使用有两种情况:

1. control中的invoke、begininvoke。

2. delegrate中的invoke、begininvoke。

这两种情况是不同的,我们这里要讲的是第1种。下面我们在来说下.NET中对invoke和begininvoke的官方定义。

control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。

control.begininvoke(参数delegate)方法:在创建控件的基础句柄所在线程上异步执行指定委托。

根据这两个概念我们大致理解invoke表是同步、begininvoke表示异步。但是如何来进行同步和异步呢?我们来做一个测试。

invoke 例子:

private void button1_Click(objectsender, EventArgs e)

{

MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString()+"AAA");

invokeThread= new Thread(newThreadStart(StartMethod));

invokeThread.Start();string a = string.Empty;for (int i = 0; i < 3; i++) //调整循环次数,看的会更清楚

{

Thread.Sleep(1000);

a= a + "B";

}

MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString()+a);

}private voidStartMethod()

{

MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString()+"CCC");

button1.Invoke(newinvokeDelegate(invokeMethod));

MessageBox.Show(Thread.Curren

;