invoke与普通调用方法的区别是什么?

nyf1220 2006-07-29 06:21:48
没大接触过winform,不过最近需要,读了一段代码,
如下:
private void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
{
Invoke(new PrintTextDelegate(PrintText), new object[] { e.Sender.Name, e.Message.Text });
}
private delegate void PrintTextDelegate(string name, string text);
private void PrintText(string name, string text)
{
conversationTextBox.Text += name + " says: " + text + "\r\n";
}
那我能不能写成
private void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
{
PrintText (e.Sender.Name, e.Message.Text); //直接调用方法。。。
}
希望各位大人给解释下。。。
...全文
2373 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liberte 2006-08-01
  • 打赏
  • 举报
回复
Mark
nyf1220 2006-08-01
  • 打赏
  • 举报
回复
呵呵,谢谢,大概明白点意思。。
其他人还有什么意见么 ?
lyq0395 2006-07-30
  • 打赏
  • 举报
回复
ding
runrunrun 2006-07-30
  • 打赏
  • 举报
回复
很多情况了。
比如你开一个线程接收网络数据,想每接收到一包数据后就刷新界面, label.Text = FrameCount; 不幸的是,在线程中这样做偶尔会死锁的,这时候,就可以用Invoke,
diandian82 2006-07-30
  • 打赏
  • 举报
回复
如果这个函数操作了主线程的界面,PrintText (e.Sender.Name, e.Message.Text);

还能直接掉么?

不是所有问题简单就可以解决的。
nyf1220 2006-07-30
  • 打赏
  • 举报
回复
原来涉及到线程问题,没有实地的操作过这个东西。。
runrunrun(做最好的自己) 这个函数什么情况下才会不在主线程里?
  • 打赏
  • 举报
回复
delegate让“回调”、“服务-客户”编程等方式变得非常简单,隐蔽了具体硬件和操作系统结构的不同实现机制的细节,设计时可以在高度耦合的结构上解耦(调转依赖关系)。设计上变得尽量简单、无歧异,系统各部分的依赖关系是一种“单向”的而不是相互递归的。

如果离开了“简单、无歧异”,技术还有什么可追随的?
  • 打赏
  • 举报
回复
那我能不能写成
——————————————————————————————————————————————
不但能,而且应该如此。

没有听说过“脱裤子放屁”有什么应该的。

同样,delegate是一个“迂回曲折”的过程,目的是让软件与设计思想相一致,用时间、空间的损失来换回开发成本的降低。delegate可以将设计“化腐朽为神奇”,但是放到眼中只有“执行效率”的人的面前其实是不值钱的。在编程时,应该运用设计的思想,而不是故意选择迂回曲折的代码去实现本来直接而简单的设计。
diandian82 2006-07-29
  • 打赏
  • 举报
回复
楼上正解。
如果在同一个线程里,你那么掉也没问题
runrunrun 2006-07-29
  • 打赏
  • 举报
回复
Invoke可以跨线程。也就是如果调用Invoke的函数不在主线程里,Invoke可以自动将参数封装->切换到主线程->执行函数->切换回调用线程。。
nyf1220 2006-07-29
  • 打赏
  • 举报
回复
主要是想了解下,区别。。。。和关系。

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧