使用该方法,您可以将方法或函数的执行从后台线程移至创建控件的线程,通常是UI(用户界面)线程。这样,您的代码将排队等待在控件的线程上运行,从而消除了并发的可能性。Control.Invoke()
Control.InvokeRequired还应该检查该属性以确定您是否需要调用,或者代码是否已经在与控件相同的线程上运行。
该Invoke()方法将委托作为其第一个参数。委托将引用,参数列表和返回类型保存到另一个方法。
在Visual Basic 2010(10.0)或更高版本中,可以使用lambda表达式动态创建委托方法:
IfLogTextBox.InvokeRequired= True Then LogTextBox.Invoke(Sub() LogTextBox.AppendText("Check passed")) Else LogTextBox.AppendText("Check passed") End If
在Visual Basic 2008(9.0)或更低版本中,您必须自行声明委托:
Delegate Sub AddLogText(ByVal Text As String) IfLogTextBox.InvokeRequired= True Then LogTextBox.Invoke(New AddLogText(AddressOf UpdateLog), "Check passed") Else UpdateLog("Check passed") End If Sub UpdateLog(ByVal Text As String) LogTextBox.AppendText(Text) End Sub