変更するプロパティごとに個別のメソッドとデリゲートを作成せずに、別のスレッドからフォーム コントロールのプロパティを変更することは可能ですか?
現在、ユーザー インターフェイスを操作するためにバックグラウンド スレッドが必要なマルチスレッド アプリケーションを作成しています。コントロールのテキスト プロパティの設定などの単純なタスクを実行するために記述しているコードの量は、シングル スレッド アプリ用に記述したコードと比較して膨大な量のように感じます。
シングル スレッド アプリでは、単純に 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