none
C# wpf之Kinect 事件觸發 RRS feed

  • 問題

  • 各位前輩好,我是Kinect的初學者,以下有個範例,其中一行一直不知為何如此撰寫,這個範例是出自王森前輩的"Kinect體感程式設計入門"8-3範例,由於之前研讀的C#書籍提到註冊事件都是寫+=,但不明白ColorWindow_Unloaded這函式裡面寫-=的用意是什麼?再麻煩各位前輩解惑,感謝您

    namespace WpfApplication1
    {
        public partial class ColorWindow : Window
        {
            KinectSensor kinect;
            public ColorWindow(KinectSensor sensor) : this()
            {
                kinect = sensor;
            }

            public ColorWindow()
            {
                InitializeComponent();
                Loaded += new  RoutedEventHandler(ColorWindow_Loaded);
                Unloaded +=new RoutedEventHandler(ColorWindow_Unloaded);
            }
            void ColorWindow_Unloaded(object sender, RoutedEventArgs e)
            {
                if (kinect != null)
                {
                    kinect.ColorStream.Disable();
                    kinect.Stop();
                    kinect.ColorFrameReady -= myKinect_ColorFrameReady;
                }
            }
            void ColorWindow_Loaded(object sender, RoutedEventArgs e)
            {
                if (kinect != null)
                {               
                    kinect.ColorStream.Enable();
                    kinect.ColorFrameReady += myKinect_ColorFrameReady;
                    kinect.Start();
                }
            }
            void myKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
            {
                using (ColorImageFrame frame = e.OpenColorImageFrame())
                {
                    if (frame != null)
                    {
                        byte[] pixelData = new byte[frame.PixelDataLength];
                        frame.CopyPixelDataTo(pixelData);
                        ColorData.Source = BitmapImage.Create(frame.Width, frame.Height, 96, 96,
                        PixelFormats.Bgr32, null, pixelData,
                        frame.Width * frame.BytesPerPixel);
                    }
                }
            }
        }
    }

    2013年1月4日 上午 11:31

解答

  •  就是把委派函式從該事件取消註冊. 意即一旦執行過這行為, 事件發生後就不會執行 myKinect_ColorFrameReady 方法.

    事件, 和事件委派函式 是不一樣的.

    以下這篇文有整理一些MSDN文件中和 C# 基礎相關的連結, 先把基本概念補起來吧.

    對初心者有助益的 MSDN 文件庫索引整理 (二) 



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 阿崴 2013年1月5日 上午 09:45
    2013年1月4日 下午 12:46
    版主