MsgBox(CBencoding.SelectedIndex)
If StopReq Then
Поток.Abort()
btnStart.Text = "Начать"
Else
Поток = New Threading.Thread(AddressOf ProcessStart)
Поток.Start()
btnStart.Text = "Стоп"
End If
Проблема синхронизации главного потока с рабочим...
Здравствуйте. У меня такая проблема. Переношу рабочую программу в отдельный поток. В главной форме сначала выбирается папка, потом жмем старт, после этого должно вылезти сообщение с SelectedIndex у объекта(для проверки), все правильно вылазит 2. Затем стартует поток:
Код:
В начале потока я пытаюсь синхронизировать потоки и снова проверить значение SelectedIndex этого же элемента, только уже из потока:
Код в начале потока:
Код:
PropertyGet(frmGen.CBencoding, frmGen.CBencoding.SelectedIndex, propval)
MsgBox(propval)
MsgBox(propval)
Процедура PropertyGet:
Код:
Public Sub PropertyGet(ByRef Myobject As Object, ByRef myProperty As String, ByRef var As String)
If Myobject.InvokeRequired Then
Myobject.Invoke(New GetText(AddressOf PropertyGet), Myobject, myProperty, var)
Else
var = myProperty
End If
End Sub
If Myobject.InvokeRequired Then
Myobject.Invoke(New GetText(AddressOf PropertyGet), Myobject, myProperty, var)
Else
var = myProperty
End If
End Sub
Делегат в функции объявлен так:
Код:
Delegate Sub GetText(ByRef Myobject As Object, ByRef myProperty As String, ByRef var As String)
но, вместо того, чтобы выполнить синхронизацию, сначало происходят много событий ValueChanged у всех элементов на форме, потом поток выполняет функцию PropertyGet, но почему то идет по ветке Else, как будто главный поток и рабочий уже синхронизированы, да еще возвращает значение SelectedIndex уже -1, хотя оно было 2 и его ни кто не менял. Скажите в чем моя ощибка и как можно получить значение свойства элемента главного потока из рабочего при помощи синхронизации? а то я всяко менял процедуры и все равно не работает как нужно. Заранее, спасибо