この質問のタイトルにどのようにアプローチすればよいかわからなかったので、疑問が明確になることを願って状況を説明します。(もっといいタイトルがあれば変更します)
ここ数日間、そのシナリオを使用したマルチスレッドと 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
それは、マルチスレッドと制御変更の目的で何らかの問題を表すでしょうか? もしそうなら、コントロールを指定せずにこれを行う別の方法はありますか?
別の注意として、私が通常メソッドを実行する方法に問題はありますか (上記のように、コントロールをパラメーターとして渡す)?
ありがとう