由于窗口更改,Combobox.OnAutoScrollTimeout会生成Null引用异常

时间:2016-11-04 14:05:27

标签: c# wpf

在我的WPF应用程序(.net 4.0)上,在没有物理鼠标(仅触摸屏)的设备上,用户在Combobox中选择了一个值。 6分钟“不活动”后(用户或软件没有动作) 提出了一个例外:

System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.Input.StylusDevice.GetMouseButtonState(MouseButton mouseButton, MouseDevice mouseDevice)
at System.Windows.Controls.ComboBox.OnAutoScrollTimeout(Object sender, EventArgs e)
at System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

似乎在用户说明重现该错误后,当usb键盘连接到设备时出现此异常。

我无法重现该错误。 在谷歌搜索没有给我任何线索

我在反编译的4.0框架代码(我没有找到4.0可下载的源代码)和源浏览器(框架4.6)上看到了一些导致:

   private void OnAutoScrollTimeout(object sender, EventArgs e)
    {
      if (Mouse.LeftButton != MouseButtonState.Pressed || !this.HasMouseEnteredItemsHost)
        return;
      this.DoAutoScroll(this.HighlightedInfo);
    }

问题似乎来自:

 public MouseButtonState LeftButton
    {
        get
        {
            return GetButtonState(MouseButton.Left);
        }
    }

    protected MouseButtonState GetButtonState(MouseButton mouseButton)
    {
        // 
        if ( _stylusDevice != null && _stylusDevice.IsValid) 
            return _stylusDevice.GetMouseButtonState(mouseButton, this);
        else
            return GetButtonStateFromSystem(mouseButton);
    }

    [SecurityCritical, SecurityTreatAsSafe]
    internal MouseButtonState GetMouseButtonState(MouseButton mouseButton, MouseDevice mouseDevice)
    {
        if (mouseButton == MouseButton.Left)
        {
            return _stylusLogic.GetMouseLeftOrRightButtonState(true);
        }
        if (mouseButton == MouseButton.Right)
        {
            return _stylusLogic.GetMouseLeftOrRightButtonState(false);
        }

        //       can defer back to the mouse device that called you and it will call Win32
        return mouseDevice.GetButtonStateFromSystem(mouseButton);
    }

很明显,代码在框架版本之间发生了变化,但即使某些更改可能会影响此代码,我也看不到可能发生空引用异常的位置。

有人能帮助我吗?

由于

更新: 经过更多的调查,我找到了答案的一部分。 在USB上连接键盘时,它会影响位于同一硬件Usb内部集线器上的触摸屏。 看来windows在这一刻就丢失了,而且“鼠标”的管理受到了影响......

0 个答案:

没有答案