Я разрабатываю плагин для приложения, это приложение «потребляет» мой код (classLibrary) и выполняет метод Init()
внутри своего собственного Thread
. Внутри Init() У меня есть оператор while(true)
, так что мой плагин может работать непрерывно.Исчезающий WindowsForm
Вчера я начал создавать windowsForm для настройки моего плагина (используя XML), и теперь хочу показать его, но он продолжает исчезать. Мой код выглядит следующим образом:
Выполнение этого будет отображать форму, но она не будет повторно рисоваться, потому что она запускается в том же потоке, что и while (true).
MaForm settingsForm = null;
void init(){
While(true){
if(settingsForm == null){
settingsForm = new MaForm();
settingsForm.show();
}
}
}
Версия, которая показывает, но затем исчезает.
MaForm settingsForm = null;
Thread worker = null;
void init(){
While(true){
if(worker == null){
worker = new Thread(new ThreadStart(formStuff));
worker.Start();
}
}
}
void formStuff()
{
if(settingsForm == null){
settingsForm = new MaForm();
settingsForm.show();
}
}
Что я делаю неправильно? Есть что-то в Threading, которого я не вижу? Что вы, ребята, думаете?
Можете ли вы рассказать мне, почему голос, я тоже здесь, чтобы узнать. Если DoEvents выглядит злым, это то же самое, когда в приложении WinForms мы вызываем Application.Run(); – manji
Я отказался, потому что при нормальных обстоятельствах вам никогда не придется использовать DoEvents. Создание формы и ее отображение - это «нормальное обстоятельство» в приложении WinForms и не требует потоковой передачи вообще, и определенно не требует бесконечного цикла с вызовом DoEvents в середине. Кроме того, я не уверен, что ваш код все равно исправит его проблему (не пробовал), но даже если бы это было сделано, было бы нецелесообразно использовать его. – MusiGenesis
Ничего личного, хотя, и ваш парусник аватар делает меня мягко счастливым. :) – MusiGenesis