As New DisplayDelegate( _
AddressOf CType(mClient, IClient).Display)
Dim ar() As Object = {Text}
'' 调用 UI 线程上的客户端窗体
'' 以更新显示
mClient.BeginInvoke(disp, ar)
End Sub
'' 从辅助线程调用,以表明出现故障
'' 这将触发对包含异常对象的 UI 的
'' 方法调用 - 该调用是在 UI 线程上
'' 进行的
Private Sub Failed(ByVal e As Exception) _
Implements IController.Failed
Dim disp As New FailedDelegate(_
AddressOf CType(mClient, IClient).Failed)
Dim ar() As Object = {e}
'' 在 UI 线程上调用客户端窗体
'' 以表明出现故障
mClient.Invoke(disp, ar)
End Sub
'' 从辅助线程上调用,以指出完成的百分比
'' 值将转到 Controller,由 UI 在需要时读取
Private Sub SetPercent(ByVal Percent As Integer) _
Implements IController.SetPercent
mPercent = Percent
End Sub
'' 从辅助线程调用,以表明已完成
'' 我们还传递参数,以表明是否真正完成,
'' 以及是否取消在 UI 线程上进行的对 UI
'' 的调用
Private Sub Completed(ByVal Cancelled As Boolean) _
Implements IController.Completed
mRunning = False
Dim comp As New CompletedDelegate( _
AddressOf CType(mClient, IClient).Completed)
Dim ar() As Object = {Cancelled}
'' 调用 UI 线程上的客户端窗体
'' 以表明已完成
mClient.Invoke(comp, ar)
End Sub
'' 表明是否仍在运行或是否已请求取消
'' 这将在辅助线程上进行调用,因此
'' 辅助代码可以查看它是否应该正常
'' 退出
Private ReadOnly Property Running() As Boolean _
Implements IController.Running
Get
Return mRunning
End Get
End Property
#End Region
Failed 和 Completed 方法利用窗体的 Invoke 方法。例如,Failed 方法可以执行以下操作:
Dim disp As New FailedDelegate(_
AddressOf CType(mClient, IClient).Failed)
Dim ar() As Object = {e}
'' 调用 UI 线程上的客户端窗体
'' 以表明出现故障
mClient.Invoke(disp, ar)
首先创建一个委托,从 IClient 接口指向客户端窗体的 Failed 方法。然后声明包含向方法传递参数值的 Object 类型数组。最后调用客户端窗体的 Invoke 方法,将委托指针和参数数组传递给窗体。
窗体将在 UI 线程(窗体在这里可以安全运行以更新显示)上使用这些参数调