我在从另一个方法调用静态方法时遇到问题。
我的静态方法是在一个单独的项目中,但我检查了引用和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();
}
}
}
答案 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 ”进行实时跟踪。