Member 12893295 Ответов: 1

Мне нужна трассировка стека со всей иерархией метода в исключение, но она отображается до Метода первого уровня


public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void Form1_Load(object sender, EventArgs e)
       {
           try
           {
              Parallel.Invoke(
                  () => this.BeginInvoke((Action)delegate
                  {
                      FirstLevel();
                  })
                  );
           }
           catch (Exception ex)
           {
               throw;
           }
       }

       private void FirstLevel()
       {
           try
           {
                   SecondLevel();

           }
           catch (Exception ex)
           {
               throw;
           }
       }

       private void SecondLevel()
       {
           try
           {
               ThirdLevel();
           }
           catch (Exception ex)
           {
               throw;
           }
       }

       private void ThirdLevel()
       {
           try
           {
               throw new DivideByZeroException();
           }
           catch (Exception ex)
           {
               throw;
           }
       }

       private void button1_Click(object sender, EventArgs e)
       {
           try
           {
               FirstLevel();
           }
           catch (Exception ex)
           {
               throw;
           }
       }
   }


Что я уже пробовал:

I have desktop application in which i have created the one form into which i have called FirstLevel method into parallel threading then firstlevel() method call secondlevel method,secontlevel method call thridlevel method and third level method have exception all method have try catch with throw but whenever exception occured the stack trace got the exception upto Firstlevel method it does not capture the Form1_Load method. ineed the all hierarchy of method into exception.

Если я удаляю потоковую обработку из метода Form1_load, то он получает исключение иерархии метода, но если я использую потоковую обработку, то это не происходит с методом form1_Load

1 Ответов

Рейтинг:
0

OriginalGriff

Это потому, что он не существует: каждый поток получает свой собственный, отдельный стек (или они будут мешать друг другу), и трассировка стека - правильно - может возвращать информацию только для стека для конкретного потока, который вызвал исключение.

На самом деле, пока у вас достаточно ядер, метод Form1_Load, вероятно, будет завершен, и исходный поток (поток пользовательского интерфейса) будет очищен до того, как возникнет исключение!


Member 12893295

есть ли для этого какая-то альтернатива

OriginalGriff

Какую часть фразы "этого не существует" вам трудно понять?
Такой трассировки стека нет, потому что они находятся на отдельных стеках. Вам нужно освежить в памяти то, что такое резьба является.

Member 12893295

Я получил все, что вы сказали, но я просто прошу обойти это..

OriginalGriff

"Его не существует".
Здесь нет обходного пути.

Подумайте об этом так: вы заказываете пиццу на вынос для себя и своих друзей. Он прибывает, вы платите за него. Пока вы за это платите, ваши товарищи заправляются. Когда вы закончили платить - потребовалась минута, чтобы получить нужную сдачу, - вы тянетесь за ломтиком, но коробка пуста. Твои приятели уже все съели. Какую работу вокруг вы можете сделать, чтобы получить кусок пиццы?

То же самое и здесь. Его не существует.

Member 12893295

Большое спасибо...

OriginalGriff

Всегда пожалуйста!