在C#多线程中,很多帖子都提到了invoke 和beginInvoke函数

各位大大,能不能通俗的给我讲讲这两个函数功能,好像子线程中对窗体上的控件进行操作的,我还不是很清楚是什么意思,我应该怎么操作啊... 各位大大,能不能通俗的给我讲讲这两个函数功能,好像子线程中对窗体上的控件进行操作的,我还不是很清楚是什么意思,我应该怎么操作啊 展开
 我来答
914066828
2012-02-18 · TA获得超过687个赞
知道小有建树答主
回答量:1353
采纳率:0%
帮助的人:671万
展开全部
大部分控件都只能在UI线程里面操作
时间长点的功能都需要放到新的线程里面
在新线程中操作控件就需要invoke 和beginInvoke
invoke用得多点,可以传一个函数或委托进去来操作控件
ccfish1314
推荐于2016-09-12 · TA获得超过1339个赞
知道答主
回答量:234
采纳率:0%
帮助的人:148万
展开全部
首先他们都是在线程中执行指定委托的。他们的参数都是delegate
invoke在使用的时候你可以看做调用一个函数。
begininvoke是在线程中异步执行委托。
追问
您好,多谢您的回答,这句话我不太理解,“他们都是在线程中执行指定委托的”,是不是说只能在同一个线程中使用invoke和begininvoke啊,不能在一个线程中调用另外线程中的函数啊?是这样的么?
追答
说着有点绕口给你MSDN的地址,你可以去看看,有不懂的可以先看那上面的
http://msdn.microsoft.com/zh-cn/library/zyzhdc6b.aspx

参考资料: http://msdn.microsoft.com/zh-cn/library/zyzhdc6b.aspx

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
韧劲9
推荐于2016-11-29 · TA获得超过9224个赞
知道小有建树答主
回答量:1638
采纳率:92%
帮助的人:355万
展开全部
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 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式