C# 事件参数-它们应该反映事件发生时的状态快照还是实时数据?

C# 事件参数-它们应该反映事件发生时的状态快照还是实时数据?,c#,wpf,events,overriding,messagebox,C#,Wpf,Events,Overriding,Messagebox,似乎传入OnPreviewMouseLeftButtonDown覆盖的args对象描述了当前(活动)鼠标按钮状态,而不是事件发生时存在状态的快照 这是正确的行为吗?事件参数是否应该反映事件发生时的事件数据(快照),而不是自动更新以反映实时数据 谢谢你, 本 代码示例 EventArgs类的任何实例成员都不能保证是线程安全的。因此,我想,如果论点的内部状态发生变化,我们就不能抱怨;) 我发现了事件处理程序中e.ButtonState的值发生变化的原因——每次访问该属性时,都会调用底层,该底层返回

似乎传入OnPreviewMouseLeftButtonDown覆盖的args对象描述了当前(活动)鼠标按钮状态,而不是事件发生时存在状态的快照

这是正确的行为吗?事件参数是否应该反映事件发生时的事件数据(快照),而不是自动更新以反映实时数据

谢谢你,


代码示例
EventArgs
类的任何实例成员都不能保证是线程安全的。因此,我想,如果论点的内部状态发生变化,我们就不能抱怨;)

我发现了事件处理程序中e.ButtonState的值发生变化的原因——每次访问该属性时,都会调用底层,该底层返回当前(活动)按钮状态与事件发生时存在的状态。(感谢微软的鲍磊(Bob Bao)


我在上写过这方面的博客。

这很奇怪;e、 ButtonState只是一个枚举值…您确定此行为吗?根据reflector,在构建MouseButtonEventArgs对象期间,按钮状态仅设置一次。是。我使用的是C#/.net3.5+WPF。从ItemsControl和WPF Toolkit的DataGrid继承时,此行为会显示出来。
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
   // before MessageBox display, e.ButtonState = Pressed
   MessageBox.Show("OnPreviewMouseLeftButtonDown");
      
   // now, e.ButtonState = Released 
   base.OnPreviewMouseLeftButtonDown(e);
}