Это классический вопрос, когда вы используете резьбу. Переменная экземпляра формы имеет атрибут <ThreadStatic
>. Это заставляет его создавать новый экземпляр формы, когда ваш код работает в другом потоке. Это может быть трудно обнаружить, форма не видна, так как вы не вызывали ее метод Show(). Не то, чтобы это все равно работало, поток не перекачивает контур сообщения.
У вашего решения проблемы есть свои проблемы. В реализации Application.OpenForms есть неприятная ошибка, она теряет следы форм, когда их окно воссоздается. Попробуйте воспользоваться этим кодом, например:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.ShowInTaskbar = False
MessageBox.Show(String.Format("There are {0} form instances", Application.OpenForms.Count))
End Sub
Существует много возможных исправлений для вашей проблемы. Вы можете маршировать вызов в поток пользовательского интерфейса с помощью Control.Begin/Invoke(). Хотя для этого требуется доступ к форме или экземпляру управления, проблема с курицей и яйцом. Лучше всего сделать, это просто передать экземпляр формы в конструктор класса от помощника:
Class Helper
Private mForm As Form1
Public Sub New(ByVal frm As Form1)
mForm = frm
End Sub
End Class
Теперь у вас есть экземпляр вам нужно.
Не забудьте поделиться своими кодами? Как вы называете этот нестатический/общий метод? –
О, моя родительская форма была формой запуска приложения, и она создала экземпляр класса, который необходимо вызвать в форме запуска. Наконец-то он работает, см. Мой ответ ниже. –