Приложение С# WinForms не закрывается при достижении конца Program.Main()

Это класс программы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestClosingApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            Console.WriteLine("I AM AT THE END OF THE MAIN");
        }
    }
}

теперь, когда я нажимаю кнопку «X», чтобы закрыть форму, это то, что я вижу в выводе vs 2015

I AM AT THE END OF THE MAIN
Exception thrown: 'System.Runtime.InteropServices.COMException' in System.Windows.Forms.dll
The thread 0x1c34 has exited with code 0 (0x0).
The thread 0x2008 has exited with code 0 (0x0).

Но это все еще не завершает приложение, кажется, что процесс все еще открыт в визуальной студии, поскольку кнопка «красный квадрат», также известная как «остановить отладку», все еще ждет нажатия. Когда я нажимаю ее, я получаю следующее сообщение:

The program '[8216] TestClosingApp.vshost.exe' has exited with code -1 (0xffffffff).

Интересно, что если я выйду из Windows и вернусь, проблема исчезнет, ​​перезапуск Visual Studio не решит проблему.


person Joao Vitor    schedule 23.01.2017    source источник
comment
Это не проблема поднятия COMException. Это, вероятно, приводит к тому, что приложение не закрывается. Можете ли вы поделиться происхождением этого исключения?   -  person Patrick Hofman    schedule 23.01.2017
comment
покажи свой код закрывающий форму   -  person T McKeown    schedule 23.01.2017
comment
Взгляните на этот вопрос - он может пролить свет о том, почему вы получаете COMException - и как его найти.   -  person Cullub    schedule 23.01.2017
comment
Похоже, вы испортили события close/dispose вашей формы?   -  person Laurent Lequenne    schedule 23.01.2017
comment
Я не думаю, что мой код как-то связан с этим, это происходит и с пустым проектом, вот и все, создайте проект и не добавляйте никакого кода. Выход из системы и вход в систему моего пользователя Windows решает проблему   -  person Joao Vitor    schedule 23.01.2017
comment
Покажите код для Form1, внутри что-то происходит, что вызывает исключение.   -  person Facundo La Rocca    schedule 23.01.2017
comment
@JoaoVitor - ??? Выход и вход в мою учетную запись пользователя Windows решает проблему не имеет смысла для меня, пожалуйста, уточните.   -  person Joe    schedule 23.01.2017
comment
@ Джо, ну, в принципе, это не должно иметь НИКАКОГО смысла. Я сохраняю свой проект, выхожу из своей учетной записи пользователя Windows, снова вхожу в систему, снова открываю проект, и форма обычно закрывается каждый раз, когда я ее запускаю. ЭТО НЕ имеет никакого смысла. Что-то обновляется в процессе, понятия не имею, что именно. может баг самой винды   -  person Joao Vitor    schedule 23.01.2017
comment
@JoaoVitor - Хорошо, просто чтобы уточнить, вы исправляете ошибку, выйдя из Windows, а затем войдя снова. Что заставляет ошибку повторяться?   -  person Joe    schedule 23.01.2017
comment
@ Джо, да, это правильно, я не уверен, что снова вызывает эту ошибку. мне это кажется немного случайным, может быть, когда я оставляю свою машину включенной на несколько часов. Извините, я совершенно слеп для этого.   -  person Joao Vitor    schedule 23.01.2017
comment
@JoaoVitor Я думаю, нам нужна трассировка стека, чтобы сказать больше.   -  person poizan42    schedule 23.01.2017
comment
@JoaoVitor, я думаю, вам следует включить больше информации, например (целевая структура, конфигурация и платформа). Может быть, мы могли бы воспроизвести проблему.   -  person 41686d6564    schedule 23.01.2017


Ответы (1)


Используйте MessageBox вместо Console.WriteLine("I AM AT THE END OF THE MAIN");

MessageBox.Show("I AM AT THE END OF THE MAIN", "My message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
person Serge Voloshenko    schedule 23.01.2017
comment
Да, вы можете, и сообщение будет отображаться в окне вывода. во время отладки. - person 41686d6564; 23.01.2017
comment
Конечно, вы можете вызвать Console.WriteLine, однако вывод может никуда не уйти. Это не имеет никакого отношения к рассматриваемой проблеме. - person poizan42; 23.01.2017
comment
@SergeVoloshenko, даже после редактирования это не имеет никакого отношения к проблеме. Следовательно, это не ответ на вопрос. Прочтите stackoverflow.com/help/how-to-answer. - person 41686d6564; 23.01.2017
comment
А также? Я уверен, что вы также не получите никаких ошибок с Console.WriteLine. - person poizan42; 23.01.2017
comment
@ poizan42 это то, что я сказал. Просто воссоздай проект с нуля. Трудно сказать, что не так. Недостаточно информации. - person Serge Voloshenko; 23.01.2017
comment
@SergeVoloshenko, если информации недостаточно, это достаточно причина не публиковать ответ. Вместо этого вы должны добавить комментарий. - person 41686d6564; 23.01.2017
comment
@AhmedAbdelhameed Я не понимаю, чего пытается добиться Жоао Витор. Если он тестирует функцию Main(), чтобы увидеть, что сработает в первую очередь, то мой ответ будет хорошей альтернативой. - person Serge Voloshenko; 23.01.2017