закрытие главного из другого потока - PullRequest
0 голосов
/ 02 апреля 2009

Я пытаюсь закрыть приложение как-то, когда заканчивается другой поток. Я использую c #. код ниже является лишь примером

class main
{
  constuctor
  {
    thread t = new thread(open loading screen);

  }

  public void open loading screen()
  {
    if (error) 
     exit program
      application.exit(); // doesn't work
     this.Close; // doesn't work
    thread.abort or mainform.abort doesnt work.
  }
}

если я вызываю функцию на главном с application.exit, это не работает, потому что вызов сделан из другого потока.

так как мне выйти из программы ??

спасибо заранее

Ответы [ 5 ]

1 голос
/ 02 апреля 2009

Используйте IsAlive в основном потоке, чтобы проверить, закончились ли другие потоки, и затем завершите работу, если они закончили.

http://www.java2s.com/Code/CSharp/Thread/UseIsAlivetowaitforthreadstoend.htm

1 голос
/ 02 апреля 2009

Используйте фоновый рабочий класс вместо обычного потока. Фоновый рабочий может использоваться для работы в другом потоке, отличном от потока пользовательского интерфейса. Он также имеет несколько удобных событий, которые можно использовать для отправки обновлений прогресса в «собственный» поток. Взгляните на:

ProgressChanged и RunWorkerCompleted

1 голос
/ 02 апреля 2009

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

0 голосов
/ 02 октября 2014

Здесь решение в одной строке кода

mainForm.Invoke((MethodInvoker)(() => mainForm.Close()));

имеет событие Closing в mainform, которое закрывает поток, если он сам не закрывается после этого

0 голосов
/ 07 апреля 2009

после большого количества ударов головой, я думаю, что добился определенного прогресса. Я не уверен на 100%, но можете ли вы выйти из приложения до завершения конструктора и загрузки основной формы?

constuctor  {    thread t = new thread(open loading screen);  }

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

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

И еще одна вещь, если все настройки потока / класса / загрузки // программы должны выполняться в главном конструкторе или каким-либо другим способом, если так, пожалуйста, сообщите.

спасибо

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