2012-04-17 6 views
1

バーコードを処理するために自動フォーカス機能を使用して基本カメラアプリを作成しようとしています。カメラの焦点が合ったように戻ると、空白の画面が表示され、そこにハングアップします。例外はスローされません。私はCaptureImage()メソッドに問題を追跡しましたが、呼び出されているのがわかりますが、OnCaptureImageAvailableメソッドは呼び出されません。これは、OnNavigatedFromメソッドでOnCaptureImageAvailableをアンフックしていない場合でも発生します。WP7 Camera CaptureImageは、写真の撮影中にバックを押したときに戻らない

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 
     _camera.AutoFocusCompleted -= OnCameraAutoFocusCompleted; 
     _camera.CaptureImageAvailable -= OnCaptureImageAvailable; 
     _camera.Initialized -= OnCameraInitialized; 
     _camera.Dispose(); 
     _camera = null; 
    } 

    private void InitializeCamera() 
    { 
     _camera = new PhotoCamera(); 
     _camera.Initialized += OnCameraInitialized; 
     viewfinderBrush.SetSource(_camera); 
    } 

    void OnCameraInitialized(object sender, EventArgs e) 
    { 
     _camera.Initialized -= OnCameraInitialized; 
     _camera.AutoFocusCompleted += OnCameraAutoFocusCompleted; 
     _camera.CaptureImageAvailable += OnCaptureImageAvailable; 

     _camera.FlashMode = FlashMode.Off; 
     _camera.Focus(); 
    } 

    private void OnCameraAutoFocusCompleted(object sender, EventArgs e) 
    { 
     _camera.CaptureImage(); 
    } 

    private void OnCaptureImageAvailable(object sender, ContentReadyEventArgs e) 
    { 
     if (_camera != null && e.ImageStream != null) 
      ScanBarcode(e); 
    } 

答えて

0

「_camera.CaptureImage();」で画像をキャプチャしている間、前のページに行き、カメラを処分していますか?

「doBack」と「captureCompleted」の2つのブール型フラグを保持する方法について説明します。

その後、OnCameraAutoFocusCompletedイベントがトリガされたときに戻っていない:captureCompletedが設定されていない限り

private void OnCameraAutoFocusCompleted(object sender, EventArgs e) 
    { 
     _camera.CaptureImage(); 
    } 

バックキーが押された場合は、doBackフラグを設定し、無視する:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     if (!captureCompleted) 
     { 
      this.doBack = true; 
      e.Cancel = true; 
     } 

     base.OnBackKeyPress(e); 
    } 

を次に、 OnBackupフラグが設定されている場合は、OnCameraCaptureCompletedイベントがトリガされたときにcaptureCompletedフラグを設定して前のページに移動し(カメラを廃棄します):

private void OnCameraCaptureCompleted(object sender, EventArgs e) 
    { 
     this.captureCompleted = true; 

     if (doBack) 
     { 
      this.Dispatcher.BeginInvoke(delegate() 
      { 
       NavigationService.GoBack(); 
      }); 
     } 
    } 
0

私はあなたのOnNavigatedFromにviewfinderBrushのソースをクリアしようとするだろう。

また、_cameraも処分しないでください。それが役立つかどうかを確認してください。

+0

OnNavigateFromで_camera.Dispose()を削除すると、呼び出しページに戻りますが、このページを再び開くことはできません。カメラが初期化される準備ができていないようです。問題を説明するためにプロジェクトをここにアップロードしました: 'https:// github.com/cobusbernard/CameraIssue /' –

関連する問題