我在winForms中有一个工作用户控件,并决定将其移植到WPF。 该控件是kinect传感器的预览控件,支持所有3个流(颜色,深度,骨架)。当我更改ViewMode(我的控件的属性)时,它应该从事件中取消注册处理程序。
看看代码:
switch (viewMode)
{
case KinectViewMode.Color:
Kinect.ColorFrameReady -= new EventHandler<ColorImageFrameReadyEventArgs>(kinect_ColorFrameReady);
if (!DoesEventHeveListeners("_colorFrameReadyContextHandler"))
Kinect.ColorStream.Disable();
break;
case KinectViewMode.Depth:
Kinect.DepthFrameReady -= kinect_DepthFrameReady;
if (!DoesEventHeveListeners("_depthFrameReadyContextHandler"))
Kinect.DepthStream.Disable();
break;
case KinectViewMode.Skeleton:
Kinect.SkeletonFrameReady -= kinect_SkeletonFrameReady;
if (!DoesEventHeveListeners("_skeletonFrameReadyContextHandler"))
{
Kinect.SkeletonStream.Disable();
}
break;
case KinectViewMode.None:
Kinect.SkeletonFrameReady -= kinect_SkeletonFrameReady;
if (!DoesEventHeveListeners("_skeletonFrameReadyContextHandler"))
{
Kinect.SkeletonStream.Disable();
}
Kinect.DepthFrameReady -= kinect_DepthFrameReady;
if (!DoesEventHeveListeners("_depthFrameReadyContextHandler"))
Kinect.DepthStream.Disable();
Kinect.ColorFrameReady -= kinect_ColorFrameReady;
if (!DoesEventHeveListeners("_colorFrameReadyContextHandler"))
Kinect.ColorStream.Disable();
registeredToEvent = false;
break;
}
}
viewMode = value;
switch (viewMode)
{
case KinectViewMode.Color:
Kinect.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(kinect_ColorFrameReady);
if (!Kinect.ColorStream.IsEnabled)
Kinect.ColorStream.Enable();
break;
case KinectViewMode.Depth:
Kinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(kinect_DepthFrameReady);
if (!Kinect.DepthStream.IsEnabled)
{
depthPixels = new short[Kinect.DepthStream.FramePixelDataLength];
colorPixels = new byte[sizeof(int) * Kinect.DepthStream.FramePixelDataLength];
Kinect.DepthStream.Enable();
}
break;
case KinectViewMode.Skeleton:
Kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(kinect_SkeletonFrameReady);
if (!Kinect.SkeletonStream.IsEnabled)
Kinect.SkeletonStream.Enable();
break;
case KinectViewMode.None:
break;
}
if (ViewMode != KinectViewMode.None)
registeredToEvent = true;
为什么这段代码在winForms中工作而不在WPF中?