我看到微软建议在 InvokeRequired 模式中使用自定义委托
但是我不明白为什么在做一些像设置控件属性这样简单的事情时,为什么不省去定义委托的麻烦。我指的是Option 1
下面只使用委托Action(Of String)
而不是自定义委托。
' Option 1
Private Sub setLabelWorkingText(ByVal [text] As String)
If Me.lblWorking.InvokeRequired Then
Me.Invoke(New Action(Of String)(AddressOf setLabelWorkingText), [text])
Else
Me.lblWorking.Text = [text]
End If
End Sub
' Option 2
Private Delegate Sub setLabelWorkingTextDelegate(ByVal [text] As String)
Private Sub setLabelWorkingTextWithDel(ByVal [text] As String)
If Me.lblWorking.InvokeRequired Then
Me.Invoke(New setLabelWorkingTextDelegate(AddressOf setLabelWorkingTextWithDel), [text])
Else
Me.lblWorking.Text = [text]
End If
End Sub
我理解一个区别是不能使用 Action 和 Func 传递参数 ByRef,但自定义委托可以指定 ByRef 参数。两者之间还有其他区别吗?