如何调试“ WindowsFormsAutoClick.Form1的类型初始化程序引发异常”?

时间:2019-04-09 20:57:52

标签: c# windows winforms dictionary typeinitializationexception

我正在尝试添加新的Dictionary值并将新的User Control添加到Flow Layout。但是,按下添加控制按钮会引发一个初始化程序异常以及一个内部异常,例如“已添加密钥”。我不知道完全例外,因为我很难找到如何打开通常在Visual Studio中显示的弹出错误。

已经设置了一个循环来检查是否已将密钥添加到字典中,如果已更改,则更改密钥(如代码blocK中所示)。 还尝试清除流布局控件列表。 (未更改错误)

抛出错误的函数:

/// <summary>
    /// Create a new key propertie set.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
private void buttonAddKey_Click(object sender, EventArgs e)
{
    // Create new UI key component in the flow layout.
    KeyPropertiesCtrl inputKeyCtrl = new KeyPropertiesCtrl();
    flowLayoutKeys.Controls.Add(inputKeyCtrl);

    Console.WriteLine("inputKeyCtrl " + inputKeyCtrl.Name + " parent " + inputKeyCtrl.Parent.Name);

    // Create new data input key.
    CustomInputKey newKey = new CustomInputKey();
    newKey.Activation.InputKey = new Interception();

    Console.WriteLine("newKey " + newKey.Activation.InputKey);

    // Get a key binding from the user.
    try
    {
        Form1.Context = InterceptionDriver.CreateContext();

        InterceptionDriver.SetFilter(Form1.Context, InterceptionDriver.IsKeyboard, (Int32)KeyboardFilterMode.All);
        InterceptionDriver.SetFilter(Form1.Context, InterceptionDriver.IsMouse, (Int32)MouseFilterMode.All);

        Form1.InterceptOnce(Form1.Context, out newKey.Activation.InputKey.DeviceId, out newKey.Activation.InputKey.TheStroke);

        InterceptionDriver.DestroyContext(Form1.Context);


        // Change the key bind in UI text.
        if (newKey.Activation.InputKey.TheStroke.Key.State != 0)
            inputKeyCtrl.button1.Text = newKey.Activation.InputKey.TheStroke.Key.Code.ToString();
        else
            inputKeyCtrl.button1.Text = newKey.Activation.InputKey.TheStroke.Mouse.State.ToString();
    }
    catch (Exception excp)
    { Console.WriteLine(excp); }

    // Set the key bind in data list.
    string name = inputKeyCtrl.Name;
    byte attempts = 0;
    while (Form1.CurrentSelections.SelectedPreset.GetCustomKeys.ContainsKey(name))
    {
        if (attempts > 50)
        {
            break;
        }
        attempts++;
        name += attempts;
    }

    Console.WriteLine(this.Name + " name Attempts " + attempts + " name " + name);

    if (attempts < 50)
        Form1.CurrentSelections.SelectedPreset.AddKey(Form1.CurrentSelections.SelectedPresetName, name, newKey);
}

所以我真正期望的是在按下按钮控件之后。它在流布局中创建一个新的用户控件,然后在它击中函数InterceptOnce()时冻结该应用程序,因为它将在那里等待我按下输入来绑定该输入。最后,存储新的键绑定并将字典保存到文件中。

但是它会在while(Form1.CurrentSelections ...){}行上引发异常“已经添加了键”,在我添加while循环和try {}行之前,该异常已引发在Form1.Context上= InterceptionDriver.CreateContext();这很奇怪,因为使用try {} catch(Exception excp){}不会引发异常。我认为异常与新的CustomInputKey()有关;而且不知道为什么...

错误: screenshot

1 个答案:

答案 0 :(得分:0)

初始化器错误信息也显示在Class [Design]中。引发异常时,使变量变为非静态变量会有所帮助,这有助于我找到异常的原因。