Существует ли быстрый способ или программное обеспечение для просмотра порядка запуска события C # Window Form? - PullRequest
0 голосов
/ 27 апреля 2018

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

1 Ответ

0 голосов
/ 27 апреля 2018

Как я понял ваш вопрос, то, что вы, вероятно, спрашиваете, называется StackTrace .

C # имеет класс System.Diagnostics.StackTrace, он представляет трассировку стека, которая представляет собой упорядоченную коллекцию одного или нескольких стековых фреймов.

Вот пример от Microsoft, как его можно использовать:

class StackTraceSample
{
    [STAThread]
    static void Main(string[] args)
    {
        StackTraceSample sample = new StackTraceSample();
        try
        {
            sample.MyPublicMethod();
        }
        catch (Exception)
        {
            // Create a StackTrace that captures
            // filename, line number, and column
            // information for the current thread.
            StackTrace st = new StackTrace(true);
            for(int i =0; i< st.FrameCount; i++ )
            {
                // Note that high up the call stack, there is only
                // one stack frame.
                StackFrame sf = st.GetFrame(i);
                Console.WriteLine();
                Console.WriteLine("High up the call stack, Method: {0}",
                    sf.GetMethod());

                Console.WriteLine("High up the call stack, Line Number: {0}",
                    sf.GetFileLineNumber());
            }
        }
    }

    public void MyPublicMethod () 
    { 
        MyProtectedMethod(); 
    }

    protected void MyProtectedMethod ()
    {
        MyInternalClass mic = new MyInternalClass();
        mic.ThrowsException();
    }

    class MyInternalClass
    {
        public void ThrowsException()
        {
            try
            {
                throw new Exception("A problem was encountered.");
            }
            catch (Exception e)
            {
                // Create a StackTrace that captures filename,
                // line number and column information.
                StackTrace st = new StackTrace(true);
                string stackIndent = "";
                for(int i =0; i< st.FrameCount; i++ )
                {
                    // Note that at this level, there are four
                    // stack frames, one for each method invocation.
                    StackFrame sf = st.GetFrame(i);
                    Console.WriteLine();
                    Console.WriteLine(stackIndent + " Method: {0}",
                        sf.GetMethod() );
                    Console.WriteLine(  stackIndent + " File: {0}", 
                        sf.GetFileName());
                    Console.WriteLine(  stackIndent + " Line Number: {0}",
                        sf.GetFileLineNumber());
                    stackIndent += "  ";
                }
                throw e;
            }
        }
    }
}

Но StackTrace может не сообщать о таком количестве вызовов методов, как ожидалось, из-за преобразований кода, которые происходят во время оптимизации.

Подробности вы можете прочитать на Страница MSDN для StackTrace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...