Search code examples
c#eventswindows-phone-8photonavigateuri

When is taking a photo done?


I'm working on a wp8-app that takes a photo and then takes you to the next screen to decide whether you like it or not. The current approach was this:

private void ShutterButton_Click(object sender, RoutedEventArgs e)
{
    if (cam != null)
    {
        try
        {
            cam.CaptureImage();

            await Task.Delay(1500);
            NavigateFront();
        }
        catch (Exception ex)
        {
            ...
        }
    }
}

public void NavigateFront()
{
    string naviString = "/confirmPicture.xaml?parameter=" + fileName.ToString();   
    _rootFrame.Navigate(new Uri(naviString, UriKind.Relative));
}

On my Lumia 520 it crashed sometimes. If I increase the wait-time to 2,5sec it works. But of course this should not be the way to do it.

If I catch the void cam_CaptureImageAvailable(object sender, Microsoft.Devices.ContentReadyEventArgs e)-Event and try to navigate after everything is done and all streams are closed I still get in a NavigateFailed-State and the app crashes.

My question is: is there any other useful event that ensures that all work is done and I can navigate without using static time-based values?


Solution

  • Navigation with a PhotoCamera is possible, just subscribe to its CaptureCompleted event handler

    cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(camera_CaptureCompleted);
    

    and this would be the event

        void camera_CaptureCompleted(object sender, CameraOperationCompletedEventArgs e)
        {
            try
            {
                Deployment.Current.Dispatcher.BeginInvoke(delegate()
                {
                    try
                    {
                        cam.Dispose();
                        NavigationService.Navigate(new Uri("URI nething", UriKind.Relative));
                    }
                    catch (Exception)
                    {
    
                         MessageBox.Show("Problem occured!!");
                    }
    
                });
            }
            catch
            {
                MessageBox.Show("Problem in camer_capturecompleted");
            }
        }
    

    I did it in one of my apps targeting windows phone 7. Check if this works for you as well.