Как остановить приложение светодиодный фонарик / фонарик с помощью Reflection в Windows Phone 7

Я делаю приложение для фонарика, в котором мне нужно постоянно использовать светодиод камеры при нажатии кнопки ON и выключать его при нажатии той же кнопки. Я следил за этой статьей Включение светодиода с помощью видеокамеры с помощью Reflection. Операция ВКЛ / ВЫКЛ работает нормально только один раз. Кодекс таков:

 private VideoCamera _videoCamera;
 private VideoCameraVisualizer _videoCameraVisualizer;
 bool _isFlashOff = true;

 private void FlashButton_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            if (_isFlashOff)
            {
                _isFlashOff = false;

                // Check to see if the camera is available on the device.
                if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
                {
                   // Use standard camera on back of device.
                    _videoCamera = new VideoCamera();
                   // Event is fired when the video camera object has been initialized.
                    _videoCamera.Initialized += VideoCamera_Initialized;

                    // Add the photo camera to the video source
                    _videoCameraVisualizer = new VideoCameraVisualizer();
                    _videoCameraVisualizer.SetSource(_videoCamera);
                }
            }
            else
            {                    
                _isFlashOff = true;
                _videoCamera.StopRecording();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void VideoCamera_Initialized(object sender, EventArgs e)
    {
        _videoCamera.LampEnabled = true;
        _videoCamera.StartRecording();
    }

Поскольку не было реализации метода StopRecording в классе VideoCamera, как указано в статье: Включение светодиода с видеокамерой с помощью Reflection. Я сделал функцию как:

 public void StopRecording()
    {
        // Invoke the stop recording method on the video camera object.
         _videoCameraStopRecordingMethod.Invoke(_videoCamera, null);
    }

Проблема заключается в том, что, когда я снова нажимаю кнопку ON, "Исключение" выдается как "TargetInvocationException". Я не могу выяснить проблему, которая вызывает исключение. Правильно ли работает функция StopRecording()..??

2 ответа

Решение

Это потому, что вы должны инициализировать камеру только один раз. Сделай это во время OnNavigatedTo событие, затем повторно используйте те же экземпляры:

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {                    
        // Use standard camera on back of device.
        _videoCamera = new VideoCamera();

        // Event is fired when the video camera object has been initialized.
        _videoCamera.Initialized += VideoCamera_Initialized;


        // Add the photo camera to the video source
        _videoCameraVisualizer = new VideoCameraVisualizer();
        _videoCameraVisualizer.SetSource(_videoCamera);
    }

    private void VideoCamera_Initialized(object sender, EventArgs e)
    {
        isInitialized = true;
    }

    bool isInitialized;
    bool isFlashEnabled;

    private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if (!isInitialized)
        {
            MessageBox.Show("Please wait during camera initialization");
            return;
        }

        if (!isFlashEnabled)
        {
            isFlashEnabled = true;

            // Check to see if the camera is available on the device.
            if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
            {
                _videoCamera.LampEnabled = true;
                _videoCamera.StartRecording();
            }
        }
        else
        {
            isFlashEnabled = false;

            _videoCamera.StopRecording();
        }
    }
Другие вопросы по тегам