我有一个简单的应用程序,可以通过pads在远程桌面上运行。
该应用程序是用Visual Basic编写的,其结构如下:
目前,例如当我从Tab_02调用打印功能时,我会这样:
我要做的是调用mainShowWaitScreen()作为参数传递一个函数,该函数完成后将自动关闭等待屏幕。
我试图像这样通过ACT或FUNC传递打印功能:
Main.setWaitScreen(msg:="Printing...", action:=cr.print(printerName:=printer))
,然后在Main.setWaitScreen中:
Public Function setWaitScreen(ByVal msg As String, ByVal action As Action) As Boolean
Try
wait = New rrWait
wait.setText(text:=msg)
Me.Controls.Add(wait)
wait.BringToFront()
wait.Dock = DockStyle.Fill
Me.Update()
action()
If Not wait Is Nothing Then
wait.Parent = Nothing
wait.Dispose()
wait = Nothing
End If
Return True
Catch ex As Exception
MessageBox.Show(ex.ToString(), MethodBase.GetCurrentMethod.Name) : Return False
End Try
End Function
问题在于函数在我声明参数时立即采取行动,而不是在Main.setWaitScreen()调用函数action()时采取行动。
错误在哪里?如何解决?
非常感谢。
里卡多
答案 0 :(得分:1)
要在vb.net中将函数作为参数传递,可以使用AddressOf
关键字。
Public Sub Execute(Action action)
Console.WriteLine("Before")
action()
Console.WriteLine("After")
End
Public Sub MyAction()
' Do something
End Sub
' And call
Execute(AddressOf MyAction)
但是因为将打印机作为参数传递给以后要调用的函数,所以不能使用AddressOf
。
相反,使用已授予打印机的匿名操作包装您的方法
Main.setWaitScreen(msg:= "Printing...", action:= Sub() cr.print(printerName:=printer))