【问题标题】:WPF NullRefrence exception within InitializeComponent() methodInitializeComponent() 方法中的 WPF NullRefrence 异常
【发布时间】:2011-10-14 12:52:47
【问题描述】:

我的 WPF、Framework 4.0 Profile 和 Intel HD 板载显卡有问题。创建新窗口时,InitializeComponent() 方法中发生 NullReference 异常。

    public override void Execute(object parameter)
    {
        InfoPage infoPage = new InfoPage(Owner);
        infoPage.ShowDialog();
    }

发生异常是因为 infoPage 变量为 NULL。当我尝试初始化其他窗口时,行为是相同的。

当用户点击“InfoPage”按钮时调用 Execute 方法。包含执行方法的类继承了 ICommand 基类。

internal class InfoPageCommand : UICommand
{
    #region Public Methods

    public override void Execute(object parameter)
    {
        InfoPage infoPage = new InfoPage(Owner);
        infoPage.ShowDialog();
    }

    #endregion
}

【问题讨论】:

  • 您何时/何地调用您的 Execute 函数?
  • 当用户点击“InfoPage”按钮时 - MVVM 模式。
  • 是否有任何内部异常消息?如果没有,如果您转到 Debug > Exceptions 并打开 Throw for CLR Exceptions,它是否会在您点击 InitializeComponent 中的 NullReference 之前的某个时间点中断?
  • 不可能出现内部异常。奇怪的是应用程序仅在某些情况下崩溃。该错误只能在整个公司的几台机器上重现。

标签: wpf


【解决方案1】:

同样的事情发生在我身上。我按照@townsean 的说明打开了 CLR 异常。然后调试显示异常发生的位置(之前没有显示调试点)。这是Slider 控件的ValueChanged 事件处理程序。我直接在其代码中访问了其他一些控件。因此我不得不为这些控件添加一个空检查。

对我来说,在我更改滑块的默认值后开始出现错误。 (事件处理程序在调用时被调用似乎是合乎逻辑的)。

private void slAddRemove_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    if (tbAdd != null && sender.Equals(slAdd))
    {
        tbAdd.Text = slAdd.Value.ToString();
    }

    if (tbRemove != null && sender.Equals(slRemove))
    {
        tbRemove.Text = slRemove.Value.ToString();
    }
}

添加tbAdd != nulltbRemove != null 后没有出现错误。

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2011-06-13
    相关资源
    最近更新 更多