none
別クラスからのinvoke方法について RRS feed

  • 質問

  • Ivb2005を勉強中の初心者です。

    送受信プログラムの前段階として、別クラス、別スレッドからリストボックスへメッセージを追加するプログラムを

    作成中です。

    formクラスからの別スレッドからのリストボックスへのメッセージ追加はうまくいくのですが、

    別クラスからリストボックスへのメッセージ追加がどうしてもうまくいきません。

    (別クラスから、メッセージ追加処理の呼び出し方がよくわかりません。)

    前回も同じ質問をして、親切にサンプルまで提供していただいたものを基にして作成しなおしたのですが、

    うまくいきません。

     

    どうかご教授下さい。 お願いします。

     

    mports System.Threading
    Public Class Form1
        Private newcls1 As class1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            newcls1 = New class1
            newcls1.setitem(Me.ListBox1)
            newcls1.threadproc("form1")
            '別スレッドで開始する
            Dim myThread As Thread
            myThread = New Thread(New ThreadStart(AddressOf session1))

            myThread.IsBackground = True
            myThread.Start()
            Control.CheckForIllegalCrossThreadCalls = False

        End Sub
        Private Sub session1()
            newcls1.threadproc("受信")
            Dim newcls2 As New cls2
            newcls2.cls2main()
        End Sub
        Private Delegate Sub delsession1(ByVal mes As String)
        Private Sub pri_print(ByVal mes As String)
            newcls1.threadproc(mes)
        End Sub

        'クラス1
        Public Class class1
            Private _logbox As ListBox
            Public Sub threadproc(ByVal mes As String)
                Dim dlg As New dlglogboxvalue(AddressOf setlistitem)
                If _logbox.InvokeRequired Then
                    _logbox.Invoke(dlg, New Object() {mes})
                Else
                    setlistitem(mes)
                End If
            End Sub
            Private Delegate Sub dlglogboxvalue(ByVal value As String)
            Private Sub setlistitem(ByVal value As String)
                _logbox.Items.Add(value)
                _logbox.TopIndex = _logbox.Items.Count - 1
                _logbox.Refresh()
            End Sub

            Public Sub setitem(ByVal targetlogbox As ListBox)
                _logbox = targetlogbox
            End Sub
        End Class
        'クラス2
        Public Class cls2
            Public Sub cls2main()
                '”送信”とリストボックスに出力したい”
                'どうやってもうまくいかない”

            End Sub
        End Class
    End Class

    2007年7月31日 8:28

すべての返信