Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mThread = New Threading.Thread(AddressOf ProcessStart)
mThread.Start()
End Sub
Private Sub NUPStrings_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NUPStrings.ValueChanged
MsgBox("И как так это сообщение появилось второй раз? как от него избавится?")
End Sub
Все таже проблема с синхронизацией
http://rapidshare.com/files/179642823/SyncBug.7z.html
вот код:
код на форме:
Код в модуле mdlSubs.vb:
Код в модуле mdlVars:
На форме имеется текстовое поле txtPath и NumericUpDown со свойством Minimum=1
Как только начинается выполнятся PropertyGet(Form1.txtPath, "Text"), то vb не переходит на эту процедуру, а сначало в окне интерапции появляется:
А затем начинает выполнятся обработчик события NUPStrings_ValueChanged (Это NumericUpDown), потом только происходит эта процедура PropertyGet и причем If obj.InvokeRequired Then идет всегда по Else, хотя обращение идет из другого потока....
Дело в том, что NUPStrings_ValueChanged не должен в это время происходить и у меня это все рушит..... помогите разобраться почему...
Кстати, если Minimum у NumericUpDown =0, то этого события не происходит, хот и в окне интерапции сообщения появляются.... очень прошу!!!! помогите!!! я очень устал с этим бороться!!
Проверочный проект vb .Net 30kb:
вот код:
код на форме:
Код:
Код в модуле mdlSubs.vb:
Код:
Public Sub PropertyGet(ByVal obj As Object, ByVal prop As String)
If obj.InvokeRequired Then
obj.Invoke(New GetProp(AddressOf PropertyGet), obj, prop)
Else
Dim obj_type As Type = obj.GetType()
Dim myprop As System.Reflection.PropertyInfo = obj_type.GetProperty(prop, System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Instance)
propval = myprop.GetValue(obj, Nothing)
End If
End Sub
Public Sub ProcessStart()
PropertyGet(Form1.txtPath, "Text")
MsgBox(propval)
End Sub
If obj.InvokeRequired Then
obj.Invoke(New GetProp(AddressOf PropertyGet), obj, prop)
Else
Dim obj_type As Type = obj.GetType()
Dim myprop As System.Reflection.PropertyInfo = obj_type.GetProperty(prop, System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Instance)
propval = myprop.GetValue(obj, Nothing)
End If
End Sub
Public Sub ProcessStart()
PropertyGet(Form1.txtPath, "Text")
MsgBox(propval)
End Sub
Код в модуле mdlVars:
Код:
Public mThread As Threading.Thread
Delegate Sub GetProp(ByVal obj As Object, ByVal prop As String)
Public propval As String
Delegate Sub GetProp(ByVal obj As Object, ByVal prop As String)
Public propval As String
На форме имеется текстовое поле txtPath и NumericUpDown со свойством Minimum=1
Как только начинается выполнятся PropertyGet(Form1.txtPath, "Text"), то vb не переходит на эту процедуру, а сначало в окне интерапции появляется:
Код:
Шаг с заходом: обход кода, не являющегося кодом пользователя ''System.Activator.CreateInstance<System.__Canon>''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.My.MyProject.MyForms.Form1.get''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.Form1''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.NUPStrings.set''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.txtPath.set''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.NUPStrings.get''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.My.MyProject.MyForms.Form1.get''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.Form1''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.NUPStrings.set''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.txtPath.set''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.NUPStrings.get''
Шаг с заходом: обход кода, не являющегося кодом пользователя ''WindowsApplication1.Form1.InitializeComponent''
А затем начинает выполнятся обработчик события NUPStrings_ValueChanged (Это NumericUpDown), потом только происходит эта процедура PropertyGet и причем If obj.InvokeRequired Then идет всегда по Else, хотя обращение идет из другого потока....
Дело в том, что NUPStrings_ValueChanged не должен в это время происходить и у меня это все рушит..... помогите разобраться почему...
Кстати, если Minimum у NumericUpDown =0, то этого события не происходит, хот и в окне интерапции сообщения появляются.... очень прошу!!!! помогите!!! я очень устал с этим бороться!!