tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル InvokeRequiredプロパティの適用範囲について
投稿日: 2016/05/16(Mon) 11:52
投稿者OrientalMelody
いつもお世話になっております。

.Netのスレッド処理を最近使い始めたものですが、
InvokeRequiredプロパティの事実上の適用範囲について悩んでいます。

サンプルとして以下のようなプロジェクトを作成します。

(1)新規プロジェクトを立ち上げ、FormオブジェクトとしてForm1、ClassオブジェクトとしてClass1ファイルを追加します。

(2)Form1ファイルにButtonコントロールとして、Button1,
  TextBoxコントロールとして、Text1, Text2を貼り付けます。
  
(3)Class1.vbファイルに以下のコードを貼り付けます。

Public Class Class1
    'フォームの参照を保持する
    Private _Form1 As Form1
    Delegate Sub AddTextCallback(ByVal text1 As String, ByVal text2 As String, ByVal frm As Form1)

    'コンストラクタ
    Public Sub New(ByVal frm As Form)
        _Form1 = CType(frm, Form1)
    End Sub

    '複数のテキストボックスに値を設定する
    Public Sub Form1TextBoxSetText(ByVal sVal1 As String, ByVal sVal2 Aas String, ByVal frm As Form1)

        If frm.TextBox1.InvokeRequired Then

            Dim d As New AddTextCallback(AddressOf Form1TextBoxSetText)
            frm.Invoke(d, New Object() {sVal1, sVal2, frm})
        Else
            frm.TextBox1.Text = sVal1
            frm.TextBox2.Text = sVal2
        End If
    End Sub
End Class

(4)Form1.vbファイルに以下のコードを貼り付けます。

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Thread1 As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf ThreadA))
        Thread1.IsBackground = True
        Thread1.Start()
    End Sub

    Private Sub ThreadA()
        Dim oClass1 As New Class1(Me)
        oClass1.Form1TextBoxSetText("TestA", "TestB", Me)
    End Sub

End Class



このときの Class1.Form1TextBoxSetTextプロシージャですが、
別スレッドかどうかを
If frm.TextBox1.InvokeRequired Then
のみで判断しています。

frm.TextBox1.InvokeRequired

frm.TextBox2.InvokeRequired
は事実上常に同じと考えても良いのでしょうか?

実際、上記のソースは問題なく動きます。

本当は業務画面には大量のコントロールがあるので、コントロール毎にプロシージャを
作りたくないのが今回の趣旨です(^^ゞ

もし何かお分かりの方がいらっしゃいましたら、
ご教示のほどよろしくお願いいたします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。