我不确定如何处理这个问题的标题,所以我会描述我的情况,希望我清楚我的疑问。(如果标题有更好的建议,我会改变它)
在过去的几天里,我一直在阅读有关使用该场景修改多线程和 GUI 控件的信息。我的问题涉及将要更改的控件作为我的委托和方法的参数传递。假设我有一个 ListView1,我想向它添加一个组(这是一个简单的体验,代码很少)
根据我见过的例子,这样做的方法是
Private Delegate Sub ResultsAddGroup_Delegate(ByVal FondsGroup As ListViewGroup)
Private Sub ResultsAddGroup(ByVal FondsGroup As ListViewGroup)
If Me.ListView1.InvokeRequired Then
Dim d As New ResultsAddGroup_Delegate(AddressOf ResultsAddGroup)
Dim ParamArgs() As Object = New Object() {FondsGroup}
Me.ListView1.BeginInvoke(d, ParamArgs)
Else
Me.ListView1.Groups.Add(FondsGroup)
End If
End Sub
我通常喜欢将控件作为参数传递,以保持代码清晰,并使方法或函数远离特定的控件对象。如果我想将 ListView 作为上述情况的参数传递,如下所示:
Private Delegate Sub ResultsAddGroup_Delegate(ByVal LView As ListView, ByVal FondsGroup As ListViewGroup)
Private Sub ResultsAddGroup(ByVal LView As ListView, ByVal FondsGroup As ListViewGroup)
If LView.InvokeRequired Then
Dim d As New ResultsAddGroup_Delegate(AddressOf ResultsAddGroup)
Dim ParamArgs() As Object = New Object() {LView, FondsGroup}
LView.BeginInvoke(d, ParamArgs)
Else
LView.Groups.Add(FondsGroup)
End If
End Sub
这会代表多线程和控制更改目的的任何问题吗?如果是这样,是否有另一种方法可以在不指定控件的情况下执行此操作?
另一方面,我通常执行我的方法的方式是否有任何问题(如上所述,将控件作为参数传递)?
谢谢