代码来源介绍
作者: 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:处理其他情况下的状态
}
}
}