Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
14 / 14 / 7
Регистрация: 23.11.2009
Сообщений: 63
1

Закрытие программы

30.09.2011, 07:23. Показов 2873. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите как отловить отключение программы(нажатие на крестик), а также после этого запустить отдельный поток.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2011, 07:23
Ответы с готовыми решениями:

Ввод текста. Закрытие программы. Запуск программы. Введенный ранее текст уже открыт
Здравствуйте. Подскажите, как сделать "Ввод текста. Закрытие программы. Запуск программы....

Закрытие программы
Сделал так чтобы при закрытии программы появлялось окно "Вы точно хотите выйти?" и две кнопки на...

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

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

4
773 / 553 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
30.09.2011, 10:19 2
Есть событие Form1_FormClosing перед закрытием и Form1_FormClosed после закрытия


C#
1
2
3
4
5
6
7
8
9
10
  private void Form1_FormClosing(object sender, FormClosingEventArgs e)
     {
         if (DialogResult.Cancel == MessageBox.Show("Вы действительно хотите выйти ?", "Программа",
         MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) e.Cancel = true; 
     }
 
   private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
           //Запустить новый поток 
        }
1
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
30.09.2011, 23:09 3
При этом после запуска нового потока надо будет заблокировать дальнейшее выполнение метода Form2_FormClosed до тех пор, пока поток не завершит свою работу.
В противном случае после отключения программы все созданные ею потоки будут убиты.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
30.09.2011, 23:33 4
Цитата Сообщение от kolorotur Посмотреть сообщение
При этом после запуска нового потока надо будет заблокировать дальнейшее выполнение метода Form2_FormClosed до тех пор, пока поток не завершит свою работу. В противном случае после отключения программы все созданные ею потоки будут убиты.
Думаю вполне разумно сделать как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            MainForm mainForm = new MainForm();
            mainForm.FormClosing += new FormClosingEventHandler(mainForm_FormClosing);
            mainForm.FormClosed += new FormClosedEventHandler(mainForm_FormClosed);
            Application.Run(mainForm);
        }
 
        static int counter = 0;
        static bool needExit;
        static void mainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            Thread thr = new Thread(new ThreadStart(() =>
                {
                    while (!needExit)
                    {
                        Thread.Sleep(1000);
                        if (++counter > 3)
                        {
                            needExit = true;
                            MessageBox.Show("Выход из программы");
                        }
                    }
                }));
            thr.Start();
        }
 
        //Ну или этот метод внутри формы определять
        static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            
        }
    }
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
01.10.2011, 00:14 5
Как вариант, можно воспользоваться классом ManualResetEvent

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ManualResetEvent workDone = new ManualResetEvent(false);
void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
   new Thread(DoWork).Start();
   workDone.WaitOne();
}
 
void DoWork()
{
   try 
  {
      spamBot.OpenNewPages("http://www.my-company-info.com", 100500);
   }
   finally
   {
      workDone.Set();
    }
}
0
01.10.2011, 00:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2011, 00:14
Помогаю со студенческими работами здесь

Событие на закрытие программы
У меня есть главная программа на XNA 4.0, которая открывает другую программу Windows Forms (будем...

Закрытие консоли во время выполнения программы
Консоль закрывается до того, как выполнится вся программа. В коде написаны комментарии и место,...

Закрытие программы при закрытии explorer
Рад приветствовать тех, кто зашёл на данную тему, ведь у меня возникла одна не большая проблема....

Как отключить закрытие программы кнопками Alt + F4?
Как отключить закрытие программы кнопками Alt + F4? Если не затруднит киньте исходник пустой формы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru