在C#多线程中,很多帖子都提到了invoke 和beginInvoke函数
各位大大,能不能通俗的给我讲讲这两个函数功能,好像子线程中对窗体上的控件进行操作的,我还不是很清楚是什么意思,我应该怎么操作啊...
各位大大,能不能通俗的给我讲讲这两个函数功能,好像子线程中对窗体上的控件进行操作的,我还不是很清楚是什么意思,我应该怎么操作啊
展开
3个回答
展开全部
首先他们都是在线程中执行指定委托的。他们的参数都是delegate
invoke在使用的时候你可以看做调用一个函数。
begininvoke是在线程中异步执行委托。
invoke在使用的时候你可以看做调用一个函数。
begininvoke是在线程中异步执行委托。
追问
您好,多谢您的回答,这句话我不太理解,“他们都是在线程中执行指定委托的”,是不是说只能在同一个线程中使用invoke和begininvoke啊,不能在一个线程中调用另外线程中的函数啊?是这样的么?
追答
说着有点绕口给你MSDN的地址,你可以去看看,有不懂的可以先看那上面的
http://msdn.microsoft.com/zh-cn/library/zyzhdc6b.aspx
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 /// <summary>
2 /// 直接调用Invoke
3 /// </summary>
4 private void TestInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 listBox1.Invoke(new Action(() =>
8 {
9 listBox1.Items.Add("Invoke");
10 }));
11
12 Thread.Sleep(1000);
13 listBox1.Items.Add("--end--");
14 }
1 /// <summary>
2 /// 直接调用BeginInvoke
3 /// </summary>
4 private void TestBeginInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 var bi = listBox1.BeginInvoke(new Action(() =>
8 {
9 //Thread.Sleep(10000);
10 listBox1.Items.Add("BeginInvoke");
11 }));
12 Thread.Sleep(1000);
13 listBox1.Items.Add("--end--");
14 }
1 /// <summary>
2 /// 线程调用BeginInvoke
3 /// </summary>
4 private void ThreadBeginInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 new Thread(() =>
8 {
9 Thread.CurrentThread.Name = "ThreadBeginInvoke";
10 string temp = "Before!";
11 listBox1.BeginInvoke(new Action(() =>
12 {
13 Thread.Sleep(10000);
14 this.listBox1.Items.Add(temp += "Invoke!" + Thread.CurrentThread.Name);
15 }));
17 temp += "After!";
18 }).Start();
19 listBox1.Items.Add("--end--");
20 }
20 private void button1_Click(object sender, EventArgs e)
21 {
22 Thread.CurrentThread.Name = "Main";
23 ThreadBeginInvoke();
24 }
25 private void button2_Click(object sender, EventArgs e)
26 {
27 listBox1.Items.Add("button2_Click");
28 }
2 /// 直接调用Invoke
3 /// </summary>
4 private void TestInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 listBox1.Invoke(new Action(() =>
8 {
9 listBox1.Items.Add("Invoke");
10 }));
11
12 Thread.Sleep(1000);
13 listBox1.Items.Add("--end--");
14 }
1 /// <summary>
2 /// 直接调用BeginInvoke
3 /// </summary>
4 private void TestBeginInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 var bi = listBox1.BeginInvoke(new Action(() =>
8 {
9 //Thread.Sleep(10000);
10 listBox1.Items.Add("BeginInvoke");
11 }));
12 Thread.Sleep(1000);
13 listBox1.Items.Add("--end--");
14 }
1 /// <summary>
2 /// 线程调用BeginInvoke
3 /// </summary>
4 private void ThreadBeginInvoke()
5 {
6 listBox1.Items.Add("--begin--");
7 new Thread(() =>
8 {
9 Thread.CurrentThread.Name = "ThreadBeginInvoke";
10 string temp = "Before!";
11 listBox1.BeginInvoke(new Action(() =>
12 {
13 Thread.Sleep(10000);
14 this.listBox1.Items.Add(temp += "Invoke!" + Thread.CurrentThread.Name);
15 }));
17 temp += "After!";
18 }).Start();
19 listBox1.Items.Add("--end--");
20 }
20 private void button1_Click(object sender, EventArgs e)
21 {
22 Thread.CurrentThread.Name = "Main";
23 ThreadBeginInvoke();
24 }
25 private void button2_Click(object sender, EventArgs e)
26 {
27 listBox1.Items.Add("button2_Click");
28 }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询