希望得到一些关于从表单上的实例化类捕获返回消息的最佳实践建议。最佳实践 - 表单类接收来自类模块的消息
在我的表单(form1.vb)中,我有一个标签,它反映了正在进行的操作,代码如下。在Form1.vb的
代码以显示消息:
Public Sub DisplayMessage(ByVal Msg as String, ByVal Show as Boolean)
Application.DoEvents()
If Show Then
lblShow.Text = Msg
lblShow.Refresh()
End If
End Sub
我已经在三个方法来至今:
直接型呼叫。在这种情况下的类直接调用窗体的消息例行:
form1.DisplayMessage("Show This Message", True)
类中的RaiseEvent。在这种情况下,form1是发送消息的类的Friends WithEvents,并且该类将事件引发到窗体。
**Declared in Form1.vb** Friend WithEvents Class1 as New Class1 **Declared in Class1.vb** Public Event SetMessage(ByVal Msg As String, ByVal Show As Boolean) **Used in Class1.vb** RaiseEvent SetMessage("Show This Message", True)
有一个EventArgs类处理该事件。在这种情况下,我们有一个EventArg.vb类,每当我们引发事件时就会实例化。
**Declared in Form1.vb** Friend WithEvents Class1 as New Class1 Private Sub class1_DisplayMessage(ByVal Msg As String, ByVal showAs Boolean, ByRef e As ProgressMessageEventArgs) Handles Class1.SetMessage DisplayMessage(Msg, Show) End Sub
**Declared in Class1.vb**
Public Event SetMessage(ByVal msg As String, ByVal Show As Boolean, ByRef e As ProgressMessageEventArgs)
Protected Sub CaptureMessage(ByVal msg As String, ByVal Show As Boolean)
RaiseEvent SetMessage(message, ShowList, New ProgressMessageEventArgs(message))
End Sub
**Used in Class1.vb**
RaiseEvent CaptureMessage("Show This Message", True)
**EventArg.vb created to handle ProgressMessageEventArgs class**
Public NotInheritable Class ProgressMessageEventArgs
Inherits System.EventArgs
Public txt As String
Public Sub New(ByVal txt As String)
MyBase.New()
Me.Text = txt
End Sub
End Class
情景1看起来是最简单的,尽管我被告知不要这样,并被要求提出一个事件。随着时间的推移,我遇到了场景3,其中涉及到了另一个场景与场景2.
因此,问题是...... 在这三种方法之间,这将是从类中返回消息的“正确”表格?根据场景3,额外的EventArg类是否必要,因为场景2也可以正常工作?
非常感谢提前。
“最佳实践”取决于情况。三种形式中的任何一种都可以根据用例进行工作。但是,'Application.DoEvents',默认表单实例和非标准事件签名不是任何最佳实践的一部分 – Plutonix
最差的做法:[Application.DoEvents()](http://stackoverflow.com/a/5183623/832052) – djv
你应该真的能够做'lblShow.Text = Msg',除非你从另一个线程运行。为什么'Application.DoEvents'和'Refresh'放在首位? – djv