Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Все таже проблема с синхронизацией

1.8K
04 января 2009 года
NextTime
217 / / 19.12.2007
Проверочный проект vb .Net 30kb: http://rapidshare.com/files/179642823/SyncBug.7z.html
вот код:
код на форме:
 
Код:
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


Код в модуле 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


Код в модуле mdlVars:
 
Код:
Public mThread As Threading.Thread
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''

А затем начинает выполнятся обработчик события NUPStrings_ValueChanged (Это NumericUpDown), потом только происходит эта процедура PropertyGet и причем If obj.InvokeRequired Then идет всегда по Else, хотя обращение идет из другого потока....
Дело в том, что NUPStrings_ValueChanged не должен в это время происходить и у меня это все рушит..... помогите разобраться почему...
Кстати, если Minimum у NumericUpDown =0, то этого события не происходит, хот и в окне интерапции сообщения появляются.... очень прошу!!!! помогите!!! я очень устал с этим бороться!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог