none
доступ к элементу управления формы через другой поток и класс RRS feed

  • Вопрос

  • Добрый день!

    У меня ситуация такая.

    Есть форма и класс Mainform. В Mainform есть textbox. Как мне записать из класса WorkerThreadClass(который запускается в отдельном потоке)  в textbox.text созданный в класе Mainform? Все методы перепробовал, все равно ошибка... помогите пожалуйста.

    Imports System.Text
    Imports System.Data.SqlClient
    Imports System.Drawing
    Imports System.Threading
    Imports System
    Imports System.Windows.Forms

    Public Class MainForm
        Inherits Form

    Private Sub Vidacha(ByVal cmd As String, ByVal ИмяТовара As String)
            Dim Thread1 As Thread
            Dim oWorker As New WorkerThreadClass()
            Thread1 = New Thread(AddressOf oWorker.WorkerThread)
            ' передаем исходные данные:
            oWorker.nPort = ModemPort
            oWorker.ИмяТовара = ИмяТовара
            oWorker.cmd = cmd
            oWorker.ThreadName = "Работа Ком порта на выдачу"
            Thread1.Priority = ThreadPriority.Highest
            Thread1.Start()
          End Sub
    End Class


    Public Class WorkerThreadClass
        Private CommPort As New RS232()
        Public nPort As Integer
        Public ThreadName As String
        Public ИмяТовара As String
        Public cmd As String

        Public Sub WorkerThread()

    'тут нужно записать textbox.text ="текст"
         
        End Sub
    End Class

    • Перемещено Abolmasov Dmitry 28 декабря 2011 г. 14:46 (От:Языки программирования)
    10 ноября 2011 г. 12:44

Все ответы

  • Сделал все как по инструкции, ничего не происходит.

     

    Public Class MainForm

        Inherits Form

        Private Sub Vidacha()
            Dim Thread1 As Thread
            Dim oWorker As New WorkerThreadClass()
            Thread1 = New Thread(AddressOf oWorker.WorkerThread)
            oWorker.ThreadName = "Работа Ком порта на выдачу"
            Thread1.Priority = ThreadPriority.Highest
            Thread1.Start()
        End Sub

    End Class



    Public Class WorkerThreadClass

        Public ThreadName As String


        Public Sub WorkerThread()
           
            Me.SetText("текст")

        End Sub


        Private Delegate Sub SetTextCallback(ByVal text As String)

        Private Sub SetText(ByVal text As String)

            If MainForm.StatusTextbox.InvokeRequired Then
                Dim d As New SetTextCallback(AddressOf SetText)
                MainForm.Invoke(d, New Object() {text})
            Else
                MainForm.StatusTextbox.Text = CStr(text)
            End If

        End Sub

    End Class

    14 ноября 2011 г. 6:42
  • Что такое StatusTextbox - это статическое поле класса главной формы? Обращаясь к MainForm.StatusTextbox вы же обращаетесь не к экземпляру класса. Попробуйте передать ссылку на самое текстовое поле в класс, и после уже использовать ее для изменения текста.
    Для связи [mail]
    14 ноября 2011 г. 7:51
  • Statustextbox - это текстовое поле класса главное формы
    14 ноября 2011 г. 8:18
  • то есть нужно передать ссылку на само текстовое поле из класса MainForm в класс WorkerThreadClass?

    А как передать самое текстовое поле из одного класса в другой?

    14 ноября 2011 г. 8:20