读别人代码发现通过control.invoke来调用方法

十八道胡同 2013-09-25 01:39:01
 _logonForm.Invoke(new Action<string>(_logonForm.SetErrorMessage), "正在连接读卡器");


_logonForm.SetErrorMessage("正在连接读卡器")

的区别是什么?好像不是异步的,而且invoke返回Object,还多一步拆箱装箱呢。

下面是invoke方法的注释:
   //
// 摘要:
// 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
//
// 参数:
// method:
// 一个方法委托,它采用的参数的数量和类型与 args 参数中所包含的相同。
//
// args:
// 作为指定方法的参数传递的对象数组。如果此方法没有参数,该参数可以是 null。
//
// 返回结果:
// System.Object,它包含正被调用的委托返回值;如果该委托没有返回值,则为 null。
public object Invoke(Delegate method, params object[] args);
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2013-09-25
  • 打赏
  • 举报
回复
引用 6 楼 sjyforg 的回复:
Invoke与BeginInvoke
文章写的挺不错的,谢谢分享
十八道胡同 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 NianHui 的回复:
MSDN有说啊。 http://msdn.microsoft.com/zh-cn/library/zyzhdc6b.aspx
额,对的。。
申江渔夫 2013-09-25
  • 打赏
  • 举报
回复
#blackheart 2013-09-25
  • 打赏
  • 举报
回复
十八道胡同 2013-09-25
  • 打赏
  • 举报
回复
引用 3 楼 NianHui 的回复:
如果是在另一个线程。 _logonForm.Invoke(new Action<string>(_logonForm.SetErrorMessage), "正在连接读卡器"); 这一行是可以执行的。 _logonForm.SetErrorMessage("正在连接读卡器") 这一行是不行的,因为SetErrorMessage中尝试修改UI线程中的resultTextEdit。 Invoke的作用就是会把你传递的委托给安插到UI线程的执行队列上,使其仍在UI线程执行。
我刚看msdn,好像没有提到线程的事情,你参考的哪里?
#blackheart 2013-09-25
  • 打赏
  • 举报
回复
如果是在另一个线程。 _logonForm.Invoke(new Action<string>(_logonForm.SetErrorMessage), "正在连接读卡器"); 这一行是可以执行的。 _logonForm.SetErrorMessage("正在连接读卡器") 这一行是不行的,因为SetErrorMessage中尝试修改UI线程中的resultTextEdit。 Invoke的作用就是会把你传递的委托给安插到UI线程的执行队列上,使其仍在UI线程执行。
#blackheart 2013-09-25
  • 打赏
  • 举报
回复
跨线程访问用的。
十八道胡同 2013-09-25
  • 打赏
  • 举报
回复
SetErrorMessage是操作控件的。
  public void SetErrorMessage(string message)
        {
            resultTextEdit.EditValue = message;
        }

110,545

社区成员

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

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

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