0

我在 VS 2012 中有这样的代码:

private void Form1_Load(object sender, EventArgs e)
    {
        if (Properties.Settings.Default["Database"] != null)
        {
            MessageBox.Show("We landed on spot 1");
        }
        else
        {
            MessageBox.Show("We landed on spot 2");
        }
    }

我很确定我搞砸了条件语法,但我希望其中一种会发生:

  1. 编译器警告错误/项目无法运行。
  2. 显示第一条消息
  3. 显示第二条消息。

但这些都没有真正发生。我已经盯着这个看了一个小时,我能找到的资源非常少。如果有经验的人可以解释一下这里到底发生了什么?

编辑: 感谢JMK 的链接,我发现这基本上是在 Windows x64 下的 VS 调试器中弹出的 wontfix 错误。如果应用程序在调试器之外运行,则会触发错误。

4

3 回答 3

3

它默默地出错。

    try
    {
        if (Properties.Settings.Default["Database"] != null)
        {
            MessageBox.Show("We landed on spot 1");
        }
        else
        {
            MessageBox.Show("We landed on spot 2");
        }
    }
    catch (Exception ee)
    {
        MessageBox.Show(ee.Message);
    }

返回“未找到设置属性‘数据库’”

于 2012-09-04T12:41:54.773 回答
0

尝试在Properties

if (WindowsFormsApplication2.Properties.Settings.Default.Database != null)
于 2012-09-04T12:52:30.367 回答
0

可能抛出异常并且调试器没有注意到。这发生在 64 位 Windows 版本上的 Windows 窗体项目(并且不是特定于 .NET 的行为,而是一般的 Windows)。

此处有更多详细信息:Visual Studio 不会因 Form_Load 事件中的异常而中断

尝试按下STRG + ALT + E并标记“Common Language Runtime Exceptions”的复选框“Thrown”。现在调试器将中断 Form_Load() 中的任何异常

因为我知道我的解决方法是完全避免使用 Load 事件。

我的大多数表单都是对话框,所以我隐藏 ShowDialog() 方法并调用 Init() 函数。

public class Form1
{

    public new DialogResult ShowDialog()
    {
        Init();
        return base.ShowDialog();
    }

    public new DialogResult ShowDialog(IWin32Window owner)
    {
        Init();
        return base.ShowDialog(owner);
    }


    public void Init()
    {
        // code goes here
    }
}
于 2012-09-04T13:28:36.350 回答