如何从一个自定义路由事件执行DeRegister。
我有以下代码(非常标准的自定义路由事件)
//Dispatch the Video Detection Movements
public delegate void MovementRoutedEventHandler( object sender
, MovementRoutedEventArgs e);
public class MovementRoutedEventArgs : RoutedEventArgs
{
private readonly DahuaDevice _device;
private readonly byte[] _canals;
private readonly DateTime _when;
public MovementRoutedEventArgs(DahuaDevice device, byte[] canals, DateTime when)
{
_device = device;
_canals = canals;
_when = when;
}
public DahuaDevice Device
{
get { return _device; }
}
public Byte[] Canals
{
get { return _canals; }
}
public DateTime When
{
get { return _when; }
}
}
public static RoutedEvent MovementEvent = EventManager.RegisterRoutedEvent(
"Movement"
, RoutingStrategy.Tunnel
, typeof(MovementRoutedEventHandler)
, typeof(Window)
);
public event RoutedEventHandler Movement
{
add { AddHandler(MovementEvent, value); }
remove { RemoveHandler(MovementEvent, value); }
}
public void RaiseMovementEvent(DahuaDevice device, byte[] canals, DateTime when)
{
RaiseEvent(new MovementRoutedEventArgs(device, canals, when)
{
RoutedEvent = MovementEvent
});
}现在,一个类将使用下面的代码行订阅此事件:
//Receive the Movement events
EventManager.RegisterClassHandler(
typeof(Window)
, Main.MovementEvent
, new Main.MovementRoutedEventHandler(MovementHandler));当我关闭类实例时,我应该从事件中执行UnSubscribe (否则,实例将不会被垃圾回收)。
我应该打什么电话?我尝试过RegisterClassHandler(typeof(Window), Main.MovementEvent, **null**),但我得到了一个异常...
欢迎任何帮助。提前谢谢。
JM
发布于 2011-10-24 05:05:38
您可以在System.Windows.Window类(通常来自UIElement类)中使用RemoveHandler方法。
代码可能如下所示:
Main.RemoveHandler( Main.MovementEvent
, new Main.MovementRoutedEventHandler(MovementHandler));发布于 2011-10-24 04:50:35
我不确定我是否完全明白你在做什么,但我会提出我的意见。
您的EventManager.RegisterClassHandler调用应该放在您希望注册的类的静态构造函数中。这将应用于类的所有实例,不应影响垃圾回收。
如果希望在每个实例级别上注册/注销事件,请使用传统的
myEvent += myDelegate;
myEvent -= myDelegate;希望这能有所帮助。
https://stackoverflow.com/questions/7866458
复制相似问题