Re: Проблема с Exciption !!
От: Maxeemus  
Дата: 05.09.03 12:53
Оценка: 2 (1)
Здравствуйте, Maxeemus, Вы писали:

M>Столкнулся с вот каким траблом. Не пойму это я что то не так сделал или баг какой в .Net

M>Есть main в оконном приложении
M>
M>static void Main(string [] args) 
M>{
M>  statiс void Main(..)
M>  {
M>    try{
M>      form.ShowDialog;
M>      ......
M>    }
M>    catch{.....}
M>  }
M>}
M>


M>в обработчике некоего события в каком то контролле возникает exception

M>так вот под дебагером он перехватываеться в Main, а если не под дебагером — после поднятия ексепшена тормозит сек. 7 а затем
M>вылетает, и не перехватываеться в Main !!!
M>Я в тупике можно сказать. Что сделать что бы все это заработало.

Вот сам нашел здесь. Помогло. Странно все это.
Re[2]: Проблема с Exciption !!
От: orangy Россия
Дата: 05.09.03 15:28
Оценка: 2 (1)
Здравствуйте, Maxeemus, Вы писали:

M>Вот сам нашел здесь. Помогло. Странно все это.

Это значит, что исключение у тебя происходит в другом потоке. Соответственно стек там свой и при раскручивании исключения оно в Main не попадает.
По хорошему ты должен подписаться на еще одно событие:
            Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionHandler);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
[RSDN@Home 1.1 beta 1] Сейчас 22:28, слушаю тишину
"Develop with pleasure!"
Проблема с Exciption !!
От: Maxeemus  
Дата: 05.09.03 12:26
Оценка:
Столкнулся с вот каким траблом. Не пойму это я что то не так сделал или баг какой в .Net
Есть main в оконном приложении
static void Main(string [] args) 
{
  statiс void Main(..)
  {
    try{
      form.ShowDialog;
      ......
    }
    catch{.....}
  }
}


в обработчике некоего события в каком то контролле возникает exception
так вот под дебагером он перехватываеться в Main, а если не под дебагером — после поднятия ексепшена тормозит сек. 7 а затем
вылетает, и не перехватываеться в Main !!!
Я в тупике можно сказать. Что сделать что бы все это заработало.
Re: Проблема с Exciption !!
От: Вадим Никулин Россия Здесь
Дата: 05.09.03 12:28
Оценка:
Здравствуйте, Maxeemus, Вы писали:

[]

Смотри опцию /EHa
Re[2]: Проблема с Exciption !!
От: Maxeemus  
Дата: 05.09.03 12:35
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Здравствуйте, Maxeemus, Вы писали:


ВН>[]


ВН>Смотри опцию /EHa


Простите, не совсем понял.
Имееться ввиду опция компилера ?
Не нашел я такой.
Re: Проблема с Exciption !!
От: mihailik Украина  
Дата: 05.09.03 17:26
Оценка:
M>
[STAThread]
M>static void Main(string [] args) 
M>
... << RSDN@Home 1.1 beta 1 >>
Re[3]: up
От: mucks  
Дата: 23.07.08 07:19
Оценка:
O>Это значит, что исключение у тебя происходит в другом потоке. Соответственно стек там свой и при раскручивании исключения оно в Main не попадает.
O>По хорошему ты должен подписаться на еще одно событие:
O>
O>            Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionHandler);
O>            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
O>



Тестовый код:
static void Main()
        {
            try
            {
                Thread.CurrentThread.Name = "opa";
                Application.Run(new Form1());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

public partial class Form1 : Form
    {
        public Form1()
        {
            // throw new Exception(Thread.CurrentThread.Name);  // первый вариант
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // throw new Exception(Thread.CurrentThread.Name); // второй вариант
        }
    }


При запуске из под студии все варианты исключений ловятся, как полагается.
Если же запускать без студии, то в первом варианте все работает аналогично, а во втором исключение не перехватывается и
вылазиет окно Unhandled exception. В сообщении исключения всегда присвоенное имя потока.
С решением в виде обработчика Application.ThreadException все понятно.
Интересна причина такого поведения. Где тут собака ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.