0

いくつかのページを含む NavigationWindow があります。ボタンで次から次へとナビゲートし、ナビゲーション ウィンドウの機能を戻します。私の問題は、いくつかのページをロードするときにディスクリプタを使用していて、navigationwindow で go back 関数を使用するときにそれを破棄したいことです (実際、「ディスクリプタ」は Kinect であり、ページがロードされると開始されます)。 Kinect で sensor.start() を使用しており、戻るときに停止したいと思いますが、sensor.stop() ... ですが、これはこの問題のファイル記述子と同じであり、より多くの人がファイル記述子で作業していると思います。 )。

ページ内の GoBack 関数を拡張して記述子を破棄する方法はありますか (私のコードでは、 sensor.stop(); を呼び出すだけで済みます)。

前もって感謝します

4

2 に答える 2

1

コメントでの私の提案は、Windows Phone の開発経験に基づいていました..しかし、navigationwindow を使用して wpf でそのソリューションを適用しようとした後、WP/silverlight で OnNavigatedTo/OnNavigatedFrom のようなものは見つかりませんでした。

しかし、代わりに NaviagtionWindow の Navigating イベントを使用できることがわかりました。その場合、this.CurrentSourcePage2 (Page2 から Page1 に戻る場合) を取得し、その Page で記述子を破棄できます。

この仕事を願っています。

于 2013-12-11T02:16:00.027 に答える
0

わかりました、回避策を実行する方法を見つけました。これは、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();
            }
        }
    }
}
于 2013-12-12T23:44:54.240 に答える