当前位置: 首页 > 编程语言 > C#

beginInvoke、GUI和线程共享

时间:2023-04-10 19:24:58 C#

beginInvoke、GUI和线程我有一个具有两个线程的应用程序。其中一个(T1)是主GUIform,另一个(T2)是循环中的函数。当T2获取一些信息时,必须使用GUIforms来调用函数。我不确定我做得对不对。T2调用函数FUNCTION以GUI形式更新某些内容。publicvoidf(){//控制器。做一点事();}publicvoidFUNCTION(){MethodInvokermethod=delegate{f();};如果(InvokeRequired){BeginInvoke(方法);}否则{f();但是现在我必须声明两个函数。它如何只使用一个功能?或者它是如何正确的。您可以通过自己调用调用在单个方法中执行此操作:publicvoidFunction(){if(this.InvokeRequired){this.BeginInvoke(newAction(this.Function));返回;}//controller.DoSomething();}编辑回应评论:如果你需要传递额外的参数,你可以像这样使用lambda表达式:publicvoidFunction2(intsomeValue){if(this.InvokeRequired){this.BeginInvoke(newAction(())=>this.Function2(someValue)));返回;}//controller.DoSomething(someValue);}对我来说很好。可以把匿名委托改成lambda,这样更清晰一些。要摆脱f()方法声明,可以将其代码内联到委托中,然后将委托作为MethodInvoker调用,或者像调用任何其他方法一样调用它:以上是C#学习教程:beginInvoke、GUI和线程共享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——publicvoidFUNCTION(){MethodInvokermethod=()=>controller.doSomething();如果(InvokeRequired){BeginInvoke(方法);}else{方法();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: