是否可以在不为要修改的每个属性创建单独的方法和委托的情况下从另一个线程修改表单控件的属性?
我目前正在编写一个多线程应用程序,我需要后台线程来操作用户界面。我觉得与我为单线程应用程序编写的代码相比,我为执行简单任务(例如设置控件的文本属性)而编写的代码量是巨大的。
在单线程应用程序中,可以简单地使用 Control.text = "My Text",但到目前为止,在创建多线程应用程序时,我需要以下所有内容才能以线程安全的方式执行相同的任务。
Delegate Sub ChangeTextDelegate(ByVal ctrl As Control, ByVal str As String)
Private Sub ChangeText(ByVal ctrl As Control, ByVal str As String)
If ctrl.InvokeRequired Then
ctrl.Invoke(New ChangeTextDelegate(AddressOf ChangeText), New Object() {ctrl, str})
Return
End If
ctrl.Text = str
End Sub
对于这些简单的任务,我有很多类似的代码似乎同样长:
Delegate Sub ChangeVisibilityDelegate(ByVal ctrl As Control, ByVal bool As Boolean)
Private Sub ChangeVisibility(ByVal ctrl As Control, ByVal bool As Boolean)
If ctrl.InvokeRequired Then
ctrl.Invoke(New ChangeVisibilityDelegate(AddressOf ChangeVisibility), New Object() {ctrl, bool})
Return
End If
ctrl.Visible = bool
End Sub