わかりました、回避策を実行する方法を見つけました。これは、WPF でオブジェクトを破棄する方法という質問にも当てはまります。WPF の破棄オブジェクトに関するすべての投稿が GC について話し、自分で破棄できないのは奇妙です。はい、GC はオブジェクトを自動的に破棄しますが、必要に応じて処理します。しかし、すぐに破棄したい場合や、破棄する前に以前の操作が必要なオブジェクトがある場合があります。私の場合、廃棄する前に Kinect を停止する必要があります (停止せずに廃棄することはできますが、kinect ir センサーはまだ動作しています)。廃棄する前にGCを停止する必要があるため、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();
}
}
}
}