还在为MethodInvoker烦恼?看完这篇就懂了!

吉云

今儿个,咱来聊聊我在捣鼓代码时遇到的一个小玩意儿——MethodInvoker。一开始听这名字,感觉挺唬人的,但实际用起来,发现还挺顺手的。

咋回事儿?

事情是这样的,我当时在做一个WinForm的小程序,需要在一个线程里更新界面上的一个控件。结果,程序直接给我报错,说是啥“跨线程操作无效”。

还在为MethodInvoker烦恼?看完这篇就懂了!

我这暴脾气,这哪能忍?于是我就开始在网上找解决办法。然后,就发现MethodInvoker这个东西。

MethodInvoker是

简单来说,MethodInvoker就是一个“委托”。这玩意儿,你可以把它想象成一个“跑腿的”。你可以把一个“任务”(也就是一个没有参数、也没有返回值的方法)交给它,让它帮你去执行。

咋用?

我当时找到的资料里,说可以用MethodInvoker来解决跨线程更新UI的问题。具体咋操作?我给你们演示一下我当时的代码:


还在为MethodInvoker烦恼?看完这篇就懂了!

// 假设这是我的一个更新UI的方法

private void UpdateUI()

// 这里写具体更新UI的代码,比如:

** = "更新后的文本";

还在为MethodInvoker烦恼?看完这篇就懂了!

// 然后,在另一个线程里,我这样用MethodInvoker:

MethodInvoker mi = new MethodInvoker(*);

*(mi);

瞧见没?就这么简单!我先把要执行的方法(UpdateUI)“包装”成一个MethodInvoker,然后通过Form的Invoke方法去执行它。这样,就相当于把更新UI的操作“委托”给主线程去执行,避免跨线程操作的问题。

还有啥要注意的?

还在为MethodInvoker烦恼?看完这篇就懂了!

  • 这玩意儿只能执行没有参数、也没有返回值的方法。如果你的方法有参数或者返回值,那MethodInvoker就帮不上忙。
  • 用的时候,记得加上“this.”。我一开始没注意,直接写成Invoke(mi),结果程序还是报错。后来才发现,要用*(mi)才行。

总结一下

MethodInvoker这个东西,对于解决WinForm程序里跨线程更新UI的问题,还是挺有用的。虽然它只能执行没有参数、也没有返回值的方法,但对于一些简单的场景,已经足够。而且用起来也挺方便的,几行代码就搞定。

还在为MethodInvoker烦恼?看完这篇就懂了!

这回分享就到这里,希望能帮到你们!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]