我在这里读到Sender永远不应该在事件处理程序中为空(Konrad Rudolph对“Best way to handle a NULL”的回答。
但是,我的事件处理程序从WPF XAML获取一个空发送者。
这是XAML:
<Storyboard x:Name="Storyboard" CurrentTimeInvalidated="StoryboardChanged">
在主窗口中,这是事件handerl:
private void StoryboardChanged(object sender, EventArgs e)
{
try
{
#region VerifyInputs
Validator.Verify(sender); <------------------- aborts on null
所以,我的问题是:我应该如何修复我的XAML,以便WPF发送非空的“发件人”值?
编辑:使用我对Validator.Verify的轻率复制/粘贴来弥补问题的应用。此方法只检查参数是否为null:
public static void Verify(Object theObj) { if (theObj == null) { string errMsg = "theObj is null"; Debug.Assert(theObj != null, errMsg); throw new ApplicationException(errMsg); } }
修改:
中止,中止,中止
对不起。发件人不是空的,e是
:(
答案 0 :(得分:1)
我认为问题可能是您的Validator类期望发件人所期望的。对于CurrentTimeInvalidated事件处理程序,“sender”不是Storyboard,它将是System.Media.Animation.Clock。如果验证器验证方法需要其他内容,则会将其视为#null。
(即,如果签名类似于Verify(对象发送者),并且您的实现执行类似“sender as Storyboard”的操作,则最终将返回null值。)