Я немного знаком с VB.NET, но очень новичок в многопоточности.Получение свойств Windows Form во время многопоточности
У меня возникла ситуация, когда я начал новый поток отдельно от основного процесса, и с этим новым потоком я создал и отобразил новую форму. Одним из методов процедуры Load() новой формы является установка местоположения формы, в зависимости от местоположения основной формы (Form1).
Я нахожу, однако, что, когда я ссылаюсь на свойства Form1 из этого потока, они не точно извлекаются. В частности, свойства Location.X и Location.Y отображаются как 0, когда они на самом деле являются более существенными целыми числами.
Private Sub SetLocation()
Dim parentx, parenty, parentw, parenth As Integer
Dim parentForm As Form = My.Forms.Form1
parentx = parentForm.Location.X
parenty = parentForm.Location.Y
parentw = parentForm.Width
parenth = parentForm.Height
Me.Location = New Point(parentx + (parentw/2), parenty + (parenth/2))
End Sub
Часть я нахожу странное об этом заключается в том, что, когда я установить контрольную точку в пределах этого SetLocation() метод, а программа перерывов для отладки, то Х и Y переменные будут сначала зарегистрироваться как 0 на дисплее значений :
Но тогда, в то время как я отладки, если доступ к информации о Form1 в IDE в его приостановленном состоянии, без возобновления приложения, а затем вернуться к просмотру X и Y значения, свойства в конечном итоге будут отображаться как их фактические значения.
Является ли это нормальным для свойства формы, которые будут загружены в середине точки отладки разрыва? Является ли это явление известным аспектом многопоточности в VB.NET? И мне придется пройти гораздо более сложные методы связи нити, чтобы мой новый поток мог получить доступ к этой информации?
Спасибо!
My.Forms.Form1 не так, как вы думаете. Это модель формы, а не экземпляр. Вам нужно будет объявить Form1 где-нибудь или передать его в поток. –
Вы говорите: «Я начал новый поток отдельно от основного процесса, и с этим новым потоком я создал и отобразил новую форму», но это плохо.Вы должны использовать только основной поток для создания элементов пользовательского интерфейса. Используйте только потоки при работе с данными, отличными от UI. – Enigmativity
@ Энигматичность Я использую поток для отображения экрана загрузки, когда данные загружаются в другой поток. Я знаю, что это технический элемент UI, но разве это не одно из применений для потоковой передачи? – Marisha