beginInvoke,GUI和线程
我有两个线程的应用程序。其中一个(T1)是主要的GUI形式,另一个(T2)是循环中的函数。当T2获取一些信息时必须用GUI的形式调用函数。 我不确定我是否做得对。beginInvoke,GUI和线程
T2调用函数FUNCTION,它以GUI的形式更新某些东西。
public void f() { // controler.doSomething();
}
public void FUNCTION() {
MethodInvoker method = delegate {
f();
};
if (InvokeRequired) {
BeginInvoke(method);
} else {
f();
}
}
但是现在我必须声明两个函数。它如何只使用一个功能?或者它是如何正确的。
回答:
你可以通过调用调用自己在一个单独的方法做到这一点:
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或简单地调用它,就象任何其它方法:
public void FUNCTION() { MethodInvoker method =()=> controller.doSomething();
if (InvokeRequired) {
BeginInvoke(method);
} else {
method();
}
}
以上是 beginInvoke,GUI和线程 的全部内容, 来源链接: utcz.com/qa/262361.html