Статический класс / метод Остановка моего приложения - PullRequest
3 голосов
/ 03 марта 2011

У меня проблемы с вызовом статического метода из другого метода.

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

Статический метод

namespace Backend
{
    static public class StartUpChecks
    {
        public static void RunAtStart()
        {
            // Calls other static methods and sets application settings
        }
     }
}

Форма Windows

using Backend;

namespace UI
{
    public partial class mainForm:Form
    {
        public mainForm()
        {
            InitializeComponent();
        }
        private void mainForm_Load(object sender, EventArgs e)
        {
            //MessageBox.Show("It Works");
            StartUpChecks.RunAtStart();
        }
    }
}

Когда я запускаю программу, она просто останавливается. Я установил точку останова на обработчике событий OnLoad, но он никогда не срабатывает. Если я комментирую MessageBox и комментирую, вызов метода вызывает событие, и появляется окно сообщения.

У меня нет ошибок в VS. Я попытался создать другой метод, Test (), и переместил StartUpChecks.RunAtStart () в него. Затем я помещаю вызов Test () после MessageBox. Событие возникает, отображается окно сообщения, но оно не переходит к методу Test ().

Кроме того, в VS при отладке я не могу перезапустить процесс и не могу ни к чему не переходить.

Есть идеи, что я сделал не так?

EDIT ---

Полный статический класс

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataSourceManager;
using UserValidator;

namespace Backend
{
    static public class StartUpChecks
    {
        public static void RunAtStart()
        {
            CheckUserAuthorised();
            CheckUserAdmin();
            SetConnection("myApplication");
        }

        private static void SetConnection(string appName)
        {
            AppControl.Connection = ConnectionSetter.SetConnectionString(appName);
        }

        private static void CheckUserAuthorised()
        {
            UserValidation checkMe = new UserValidation(AppControl.Connection);
            AppControl.UserIsAuthorised = checkMe.UserIsAuthorised();
        }

        private static void CheckUserAdmin()
        {
            UserValidation checkMe = new UserValidation(AppControl.Connection);
            AppControl.UserIsAdmin = checkMe.UserIsAdmin();
        }
    }
}

Ответы [ 3 ]

1 голос
/ 03 марта 2011

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

Лучший способ обойти это - использовать Project + Properties, вкладку Build, Platform target = x86. Это значение по умолчанию для VS2010, а также повторное включение Edit + Continue. Ницца. Если запуск в 64-битном режиме действительно важен, вы можете перехватить исключение с помощью «Отладка + исключения», отметьте «Брошенный» для исключений общеязыковой среды выполнения.

В противном случае эта ошибка не будет байтовой в вашей окончательной программе, она будет работать неправильно только при подключенном отладчике.

1 голос
/ 03 марта 2011

Пожалуйста, попробуйте настроить VS для обработки выданных исключений:

Главное меню -> Отладка -> Исключения => Установить флажок рядом с исключениями CLR в ячейке «Брошенный»

Другая точка включения внешней отладки кода

Главное меню -> Инструменты -> Параметры -> Отладка -> Снять отметку Просто в моем коде

После этих изменений попробуйте запустить приложение

0 голосов
/ 03 марта 2011

Попробуйте отловить ошибку в событии AppDomain.CurrentDomain.UnhandledException.Вы добавляете этот код в конструктор mainform.

    public MainForm()
    {
        InitializeComponent();
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    }

    void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        //Diagnose the exception here..
    }

Кроме того, вы можете попробовать использовать утилиту отладки и трассировки живого клиента Windows " Donsole " для трассировки в реальном времени..

enter image description here

...