代码注释之Kinect设备发现

来源:互联网 发布:教孩子学编程 编辑:程序博客网 时间:2024/05/21 03:26

代码来源介绍

作者:   yangecnu(yangecnu's Blog on 博客园)
出处:http://www.cnblogs.com/yangecnu/
作品由yangecnu创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请给我留言。

public partial class MainWindow : Window
    {
        //私有Kinectsensor对象
        private KinectSensor kinect;

        public KinectSensor Kinect
        {
            get { return this.kinect; }
            set
            {
                //如果带赋值的传感器和目前的不一样
                if (this.kinect != value)
                {
                    //如果当前的传感对象不为null
                    if (this.kinect != null)
                    {
                        //uninitailize当前对象
                        this.kinect = null;
                    }
                    //如果传入的对象不为空,且状态为连接状态
                    if (value != null && value.Status == KinectStatus.Connected)
                    {
                        this.kinect = value;
                    }
                }
            }
        }


        public MainWindow()
        {
            InitializeComponent();
            //应用程序运行后,当主窗口加载时,调用发现传感器设备,并作相应处理
            this.Loaded += (s, e) => DiscoverKinectSensor();
            //应用程序关闭时,将机器设备中的传感器设备对象置空释放
            this.Unloaded += (s, e) => this.kinect = null;
        }
        private void DiscoverKinectSensor()
        {
            //将传感器状态变化事件与相应函数绑定,跟踪处理设备状态变化
            KinectSensor.KinectSensors.StatusChanged += KinectSensors_StatusChanged;
            //应用程序第一次搜索加载传感器设备,用Kinect属性确保kinnect对象正确初始化
            this.Kinect = KinectSensor.KinectSensors.FirstOrDefault(x => x.Status == KinectStatus.Connected);
        }
        //应用程序运行期间,保持对设备对象状态的动态跟踪与处理
        private void KinectSensors_StatusChanged(object sender, StatusChangedEventArgs e)
        {
            switch (e.Status)
            {
                case KinectStatus.Connected:
                    if (this.kinect == null)
                        this.kinect = e.Sensor;
                    break;
                case KinectStatus.Disconnected:
                    if (this.kinect == e.Sensor)
                    {
                        this.kinect = null;
                        this.kinect = KinectSensor.KinectSensors.FirstOrDefault(x => x.Status == KinectStatus.Connected);
                        //当前设备断开连接时,再次搜索处于连接状态的kinnect设备
                        //如果没有则提醒设备断开
                        if (this.kinect == null)
                        {
                            //TODO:通知用于Kinect已拔出
                            MessageBox.Show("未搜索到任何可连接的kinnect设备!");
                        }
                    }
                    break;
                //TODO:处理其他情况下的状态
            }
        }


    }