好的,我找到了解决方法。它也适用于以下问题:如何在 WPF 中处理对象。奇怪的是,所有关于在 WPF 中处理对象的帖子都谈论 GC 并且您不能自己处理它。是的,GC 会自动处理对象,但在他需要的时候。但也许您想立即处置,或者您有一个对象需要在处置之前进行先前的操作。在我的情况下,Kinect 需要在处理之前停止(您可以在不停止的情况下进行处理,但 kinect 红外传感器仍在工作)。GC 不是解决方案,因为我需要在处理之前停止它。
所以,解决方案:
public partial class MyClass : Page
{
private KinectSensor sensor;
public MyClass()
{
InitializeComponent();
this.Loaded += (s, e) => { NavigationService.Navigating += NavigationService_Navigating; };
// What you want to add to the constructor
// I want to start Kinect
sensor = KinectSensor.KinectSensors.FirstOrDefault(k => k.Status == KinectStatus.Connected);
sensor.Start();
}
public void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (e.NavigationMode == NavigationMode.Back)
{
// What you want to do.
// I want to stop and dispose Kinect
if (sensor != null)
{
sensor.Stop();
sensor.Dispose();
}
}
}
}