beginInvoke,GUI和线程
我有两个线程的应用程序。 其中一个(T1)是主GUIforms,另一个(T2)是循环中的function。 当T2得到一些信息时必须用GUIforms调用函数。 我不确定我做得对。
T2调用函数FUNCTION,以GUIforms更新某些内容。
public void f() { // controler.doSomething(); } public void FUNCTION() { MethodInvoker method = delegate { f(); }; if ( InvokeRequired ) { BeginInvoke( method ); } else { f(); } }
但现在我必须宣布两个function。 它如何只使用一个function? 或者它是如何正确的。
您可以通过调用自己调用在单个方法中执行此操作:
public void Function() { if (this.InvokeRequired) { this.BeginInvoke(new Action(this.Function)); return; } // controller.DoSomething(); }
编辑以回应评论:
如果需要传递其他参数,可以使用lambda表达式执行,如下所示:
public void Function2(int someValue) { if (this.InvokeRequired) { this.BeginInvoke(new Action(() => this.Function2(someValue))); return; } // controller.DoSomething(someValue); }
在我看来很好。 您可以将匿名委托更改为lambda,这有点清晰。 要摆脱f()方法声明,可以将其代码内联到委托中,然后将委托作为MethodInvoker调用,或者像调用任何其他方法一样调用它:
上述就是C#学习教程:beginInvoke,GUI和线程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public void FUNCTION() { MethodInvoker method = ()=> controller.doSomething(); if ( InvokeRequired ) { BeginInvoke( method ); } else { method(); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1028153.html