Я пытаюсь создать приложение Windows, которое запускается в системном трее как NotifyIcon
, а затем отображает некоторые формы на основе событий и ввода пользователя. Я использую Visual Studio 2013Как показать форму из потока, отличной от потока ApplicationContext
Так что я сделал это удалить форму по умолчанию создает VS и удалить Application.run()
из Program.cs
и сделал Application.run(new MyApplicationContext())
где MyApplicationContext
это класс, который расширяет ApplicationContext
где я инициализирует и показать NotifyIcon
Затем я создал поток woker, который запрашивает базу данных для информации и пытается показать эту информацию в NotificationForm
, который я создал.
Если я что-то вроде этого в коде Woker резьбы:
NotificationForm form = new form();
form.Top = // change the location;
form.show();
Уведомление показывает, в положении по умолчанию, и любой элемент пользовательского интерфейса на нем кажется прозрачным, и я могу видеть, вплоть до рабочего стола
Но если я назову Application.run(form)
в рабочем потоке, форма работает правильно и отображается в правильном положении, но она блокирует мой рабочий поток.
Если бы у меня был Form
, я бы назвал Invoke
на этом Form
. Но что я должен делать в моем случае?
РЕДАКТИРОВАТЬ: В качестве обходного Я инициировал Form
под названием parentForm
в MyApplicationContext
затем называется шоу на нем затем сделал его невидимым. И затем я вызываю из этого. Но это грязная работа, а не правильная;
Любые комментарии, почему я заслуживаю голосования, поэтому я мог бы хотя бы улучшить? – vlatkozelka
Вы пробовали просто прокручивать новый поток и запускать 'Application.Run (form);' в этом потоке? –