none
обработка аварийного завершения приложения RRS feed

  • Вопрос

  • Интересует ситуация, когда ,например, приложение закрываем с помощью alt+f4. Дело в том, что при запуске моего приложения, я скрываю панель задач windows и кнопку пуск. после завершения (нормального завершения приложения) я восстанавливаю панель и кнопку.

    var stHwnd = Win32.FindWindow("Shell_TrayWnd", null);
    var bHwnd = Win32.FindWindow("Button", null);
    Win32.ShowWindow(stHwnd, Win32.SW_SHOW);
    Win32.ShowWindow(bHwnd, Win32.SW_SHOW);

    но когда приложение завершается с ошибкой или по alt+f4. то панель, естественно, не восстанавливается. Как мне отловить момент неправильного завершения приложения???? 

    6 августа 2013 г. 13:01

Ответы

  • Но не забывайте, что при снятии процесса в списке задач, ни один из предложенных способов работать не будет.
    7 августа 2013 г. 8:12
    Отвечающий
  • Добрый вечер, может быть конструкция try .. finally вам поможет

    "Навесьте" при инициализации проекта и тогда, что бы не случилось с основным телом программы - код в любом случае придёт в finally.

    Так же почитайте статью

    http://msdn.microsoft.com/ru-ru/library/zwc8s4fz.aspx


    Indie Game Developer


    6 августа 2013 г. 18:34
  • Подпишитесь на событие AppDomain.ProcessExit. Это событие происходит тогда когда завершается родительский процесс.

    Вот Вам пример небольшой

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; //Подписываемся на событие
            }
    
            public void CurrentDomain_ProcessExit(object sender, EventArgs e)
            {
                MessageBox.Show("Закрытие приложения");
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
        }
    }

    В результате происходит это событие даже при alt-f4. Происходит даже тогда, когда вы завершаете процесс через диспетчер задач.


    6 августа 2013 г. 19:47

Все ответы

  • OnApplicationExit()

    проверить состояния кнопки и панель. если .. то ... если нет, то ...

    6 августа 2013 г. 17:27
  • Добрый вечер, может быть конструкция try .. finally вам поможет

    "Навесьте" при инициализации проекта и тогда, что бы не случилось с основным телом программы - код в любом случае придёт в finally.

    Так же почитайте статью

    http://msdn.microsoft.com/ru-ru/library/zwc8s4fz.aspx


    Indie Game Developer


    6 августа 2013 г. 18:34
  • Подпишитесь на событие AppDomain.ProcessExit. Это событие происходит тогда когда завершается родительский процесс.

    Вот Вам пример небольшой

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; //Подписываемся на событие
            }
    
            public void CurrentDomain_ProcessExit(object sender, EventArgs e)
            {
                MessageBox.Show("Закрытие приложения");
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
        }
    }

    В результате происходит это событие даже при alt-f4. Происходит даже тогда, когда вы завершаете процесс через диспетчер задач.


    6 августа 2013 г. 19:47
  • Но не забывайте, что при снятии процесса в списке задач, ни один из предложенных способов работать не будет.
    7 августа 2013 г. 8:12
    Отвечающий