C#:取消注册事件在WPF UserControl中不起作用

时间:2012-10-02 16:14:50

标签: c# wpf events

我在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中?

0 个答案:

没有答案