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

回到顶部