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

Я делаю приложение для фонарика, в котором мне нужно постоянно использовать светодиод камеры при нажатии кнопки ВКЛ и выключать его при нажатии той же кнопки. Я следил за этой статьей Включение светодиода с помощью видеокамеры с помощью 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, "Exception" выдается как "TargetInvocationException". Я не могу понять проблему, которая вызывает исключение. Правильно ли работает функция StopRecording()..??


person Shaan_14    schedule 27.08.2012    source источник
comment
Как вы создаете экземпляр _videoCameraStopRecordingMethod ?   -  person Kevin Gosse    schedule 28.08.2012
comment
Я объявил его как: private MethodInfo _videoCameraStopRecordingMethod и создал экземпляр как _videoCameraStopRecordingMethod = videoCameraType.GetMethod(StopRecording); что-то не так с методом public void StopRecording()...??   -  person Shaan_14    schedule 28.08.2012
comment
Может ли кто-нибудь помочь мне с этим..?? Как мне создать метод StopRecording()...??   -  person Shaan_14    schedule 30.08.2012


Ответы (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();
        }
    }
person Kevin Gosse    schedule 02.09.2012
comment
Awesum ответ.... Большое спасибо..!!!! KooKiz... Вы спасли мой день... Большое спасибо за ответ... Еще раз вопрос, как я могу добиться функции мигания для этого фонарика..?? - person Shaan_14; 02.09.2012
comment
@Shaan_14 Shaan_14 Думаю, поставить таймер и альтернативно включать и выключать фонарик, когда он тикает. - person Kevin Gosse; 02.09.2012
comment
Просто проблема с кодом, когда я нажимаю кнопку «Назад», чтобы перейти на главную страницу и снова перейти на страницу фонарика, я получаю исключение TargetInvocationException в строке _videoCameraVisualizer.SetSource(_videoCamera); метода OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e). Принимая во внимание, что если я нажму кнопку Windows или кнопку поиска, она начнет работать. - person Shaan_14; 02.09.2012

Попробуй это:

http://msdn.microsoft.com/en-us/library/hh202949.aspx

person Gambit    schedule 31.08.2012