Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Почему не получается работать с контролами из другого потока?


Автор: Exception 7.6.2006, 17:46
Многие элементы WinForms не являются безопасными по отношению к потокам. Поэтому обращаться к ним можно только из того потока, в котором они были созданы. Если нужно обратиться из другого потока, необходимо проверить свойство InvokeRequired и, при значении True, вызвать метод Invoke с передачей делегата на метод, который нужно выполнить - контрол его вызовет сам:

Код

    Private Sub 
        If MyTextBox.InvokeRequired Then
            MyTextBox.Invoke(AddressOf DoSomeActions)
        Else
            DoSomeActions()
        End If
    End Sub

    Private Sub DoSomeActions()
        MyTextBox.Text= "some text"
    End Sub


Впрочем, разумнее для этих целей воспользоваться компонентом BackgroundWorker, который инкапсулирует эту функциональность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)