Как создать форму в собственном потоке и держать ее открытой в течение всего срока службы приложения - PullRequest
3 голосов
/ 16 декабря 2008

Я создаю небольшой компонент для тестирования и сталкиваюсь с проблемой

В основном компонент является декоратором класса, который контролирует весь доступ к базе данных, он создает форму с двумя кнопками: «Имитация потерянного соединения» и «Переподключение». Нажмите кнопку, и вместо того, чтобы пропустить вызовы функций через обертку, вы получите красивое и простое NoConnectionException (), очень полезное для тестирования.

Проблема в том, что это конкретное приложение, когда оно обнаруживает потерянное соединение, вызывает модальное диалоговое окно "соединение потеряно!" который сидит там, пока соединение не будет восстановлено. Поскольку это модально, я не могу нажать свою изящную кнопку, чтобы симулировать восстановленную связь.

Поэтому мне нужно запустить мою маленькую форму тестирования в другом потоке. Я не совсем уверен, как это сделать. Я пытался

new Thread(
  new ThreadStart(
    (Action)delegate {_form.Start();}
  )
).Start();

Но поток закрывается, как только метод возвращается, поэтому форма никогда не появляется, кроме как на мгновение.

Есть идеи, как мне добиться того, чего я хочу?

Ответы [ 4 ]

3 голосов
/ 16 декабря 2008

Вам нужно будет запустить цикл обработки сообщений во вновь созданном потоке. Вы можете сделать это, вызвав Application.Run (форма).

1 голос
/ 16 декабря 2008

Попробуйте

new Thread(
  new ThreadStart((Action)delegate {
        _form.Start();
        System.Windows.Forms.Application.Run();
    }
  )
).Start();
0 голосов
/ 09 ноября 2009
showdialog :
System.Threading.Thread t = new System.Threading.Thread(new form1().ShowDialog());
t.Start();
0 голосов
/ 16 декабря 2008

Похоже, вы не держитесь за свою ветку. Это объект, как и все остальное, поэтому если он ограничен вашим методом, он выйдет из области видимости после выхода из вашего метода. Попробуйте сделать его переменной экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...