我建议在所有的主要形式可以响应的类使用常见的自定义事件处理程序。首先定义一个新的EventArgs类来处理通知你回送:
Public NotInheritable Class NtfyEventArgs
Inherits EventArgs
Private _Action As String
Public ReadOnly Property Action As String
Get
Return _Action
End Get
End Property
Public Sub New(ByVal action As String)
_Action = action
End Sub
End Class
下一个定义一个基类,以提高通知:
Public Class Base
Public Event Ntfy(ByVal sender As Object, ByVal e As NtfyEventArgs)
Protected Sub RaiseNtfy(ByVal action As String)
RaiseEvent Ntfy(Me, New NtfyEventArgs(action))
End Sub
End Class
有其他每个班从基本继承类。然后,它变得相当容易发出通知:
Public Class ProcessActions
Inherits Base
Public Sub LaunchProcess
'Do stuff
RaiseNtfy("Process 1 launched")
'Do more stuff
RaiseNtfy("Process 2 launched")
End Sub
End Class
最后,在你的主要形式,听取由子类中提出的任何事件
Public Class Form1
Private WithEvents process As New ProcessActions
Private WithEvents file As New FileActions
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Add Event handlers
AddHandler process.Ntfy, AddressOf HandleNtfy
AddHandler file.Ntfy, AddressOf HandleNtfy
End Sub
'One procedure to handle all the incoming notifications
Private Sub HandleNtfy(ByVal sender as Object, ByVal e as NtfyEventArgs)
lblNtfy.Text = e.Action
'If need to take different actions based on the class sending notification
If TypeOf(Sender) Is ProcessActions Then
'Specific code for ProcessActions
End If
End Sub
End Class
@Hans您的评论似乎并不十分准确。我可以想到很多例子,程序告诉用户它在做什么。即:删除文件显示文件进入回收站的图形并显示当前正在删除的文件的名称。当它结束时,它会消失。对于用户正在与之交互的任何程序,必须有一些方法让他们知道它已完成当前过程。否则,他们会坐在那里试图决定程序是否工作,是否出错或是否仍在处理中。 – briddums
@HansPassant请不要在没有知道应用程序试图构建什么应用程序的情况下得出无用代码的结论。 (我对这种全知的态度感到厌倦)我正在制作一个应用程序来测试一个嵌入式设备,其中用户在填充特定数据后单击一个按钮,应用程序进行各种端口测试,我想给用户当前测试的状态。我不认为这会是“无用的代码” – swordfish
不要犹豫,在你的问题中提供相关细节,帮助人们给你一个更好的答案。让他们猜测它会在任何一端产生烦恼。 –