静态类/方法停止我的应用程序

时间:2011-03-03 14:26:03

标签: c# winforms static-methods

我在从另一个方法调用静态方法时遇到问题。

我的静态方法是在一个单独的项目中,但我检查了引用和using语句,一切似乎都正确。以下是简化版。

静态方法

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()移入其中。然后我在MessageBox之后调用Test()。触发事件,消息框显示但不会转到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 个答案:

答案 0 :(得分:1)

请尝试配置VS以处理抛出的异常:

主菜单 - >调试 - >例外=>在“Thrown”单元格中的CLR Exceptions旁边设置复选框

其他点启用外部代码调配

主菜单 - >工具 - >选项 - >调试 - >取消选中我的代码中的点

完成此更改后,尝试运行您的应用程序

答案 1 :(得分:1)

操作系统和64位调试器之间的交互存在一个令人讨厌的错误。它会导致在没有诊断的情况下吞下Load事件处理程序(或OnLoad方法覆盖)中引发的异常。

绕过它的最佳方法是使用Project + Properties,Build选项卡,Platform target = x86。这是VS2010的默认设置,也可以重新启用Edit + Continue。尼斯。如果以64位模式运行非常重要,那么可以使用Debug + Exceptions捕获异常,勾选Common Language Runtime异常的Thrown框。

此错误在最终程序中不会出现字节,只有在连接调试器时才会出错。

答案 2 :(得分:0)

尝试捕获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