0

我在这里读到 Sender 在事件处理程序中永远不应该为空(Konrad Rudolph对“处理 NULL 的最佳方式”的回答)。

但是,我的事件处理程序从 WPF XAML 获得了一个空发送者。

这是 XAML:

<Storyboard x:Name="Storyboard"  CurrentTimeInvalidated="StoryboardChanged">

在主窗口中,这是事件处理程序:

private void StoryboardChanged(object sender, EventArgs e)
{
        try
        {
            #region VerifyInputs

            Validator.Verify(sender); <------------------- aborts on null

所以,我的问题是: 我应该如何修复我的 XAML 以便 WPF 发送一个非空的“发件人”值?

编辑:用我不假思索的 Validator.Verify 复制/粘贴来解决问题的应用程序。这个方法只是检查参数是否为空:

    public static void Verify(Object theObj)
    {
        if (theObj == null)
        {
            string errMsg = "theObj is null";
            Debug.Assert(theObj != null, errMsg);
            throw new ApplicationException(errMsg);
        }
    }

编辑

中止,中止,中止

对不起。发件人不为空,e 为

:(

4

1 回答 1

1

我认为问题可能是您的 Validator 类期望发件人是什么。对于 CurrentTimeInvalidated 事件处理程序,“发送者”不是 Storyboard,而是 System.Media.Animation.Clock。如果您的验证器验证方法期待其他内容,它将被视为#null。

(即,如果签名类似于 Verify(object sender) 并且您的实现执行类似于“sender as Storyboard”之类的操作,它将以空值结束。)

于 2012-09-14T00:34:10.643 回答