0

我有一个带有一些页面的 NavigationWindow。我用按钮从一个导航到另一个,然后返回导航窗口的功能。我的问题是我在某些页面加载时使用了描述符,并且我想在您在导航窗口中使用返回功能时处理它(实际上“描述符”是 Kinect,当页面加载时,它会启动Kinect 与 sensor.start(),我想在返回时停止它,sensor.stop()...但我认为它与此问题的文件描述符相同,并且更多人使用文件描述符)。

有什么方法可以扩展页面中的 GoBack 函数来处理描述符(在我的代码中我只需要调用 sensor.stop(); )?

提前致谢

4

2 回答 2

1

我在评论中的建议是基于 windows phone 开发经验的。但是在我尝试使用 navigationwindow 在 wpf 中应用该解决方案之后,我在 WP/silverlight 中没有发现像 OnNavigatedTo/OnNavigatedFrom 这样的东西。

但我发现可以改用 NaviagtionWindow 的导航事件。在这种情况下,您可以获得this.CurrentSource哪个是 Page2(如果您从 Page2 导航回 Page1)并在该 Page 中处理描述符。

希望这项工作。

于 2013-12-11T02:16:00.027 回答
0

好的,我找到了解决方法。它也适用于以下问题:如何在 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();
            }
        }
    }
}
于 2013-12-12T23:44:54.240 回答