2016-09-03 12 views
0

Windows Phone 8.1のqrcodeスキャナカスタムアプリケーションを開発中です。 デコード後、QRコード画像をプレビューできるように、バックカメラをレンダリングするためにNokia Imaging SDKを使用しています。メッセージダイアログを表示できません。次の例外をスローします。Windows phoneのダイアログボックスを表示できません。8.1

アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。 (HRESULTからの例外:0x8001010E(RPC_E_WRONG_THREAD)) `

は、ここにプレビュー

private async void Init() 
{ 
    //Get back camera 
    var devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); 
    var backCameraId = devices.FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back).Id; 

    //Start preview 
    _cameraPreviewImageSource = new CameraPreviewImageSource(); 
    await _cameraPreviewImageSource.InitializeAsync(backCameraId); 
    var properties = await _cameraPreviewImageSource.StartPreviewAsync(); 

    //Setup preview 
    _width = 300.0; 
    _height = (_width/properties.Width) * properties.Height; 
    var bitmap = new WriteableBitmap((int)_width, (int)_height); 

    _writeableBitmap = bitmap; 

    PreviewImage.Source = _writeableBitmap; 

    _writeableBitmapRenderer = new WriteableBitmapRenderer(_cameraPreviewImageSource, _writeableBitmap); 

    _cameraPreviewImageSource.PreviewFrameAvailable += _cameraPreviewImageSource_PreviewFrameAvailable; 

    _videoDevice = (VideoDeviceController)_cameraPreviewImageSource.VideoDeviceController; 

    //Set timer for auto focus 
    if (_videoDevice.FocusControl.Supported) 
    { 
     var focusSettings = new FocusSettings 
     { 
      AutoFocusRange = AutoFocusRange.Macro, 
      Mode = FocusMode.Auto, 
      WaitForFocus = false, 
      DisableDriverFallback = false 
     }; 

     _videoDevice.FocusControl.Configure(focusSettings); 

     _timer = new DispatcherTimer 
     { 
      Interval = new TimeSpan(0, 0, 0, 2, 0) 
     }; 
     _timer.Tick += TimerOnTick; 
     _timer.Start(); 
    } 

    await _videoDevice.ExposureControl.SetAutoAsync(true); 

    _initialized = true; 

} 

を初期化するとき、これは私がUIスレッド上であなたに操作を実行する

private async void Deocode(byte[] rawRgb, BitmapFormat bitmapFormat) 
{ 
    await Task.Run(() => 
    { 
     if (_decoding) 
      return; 

     _decoding = true; 

     var decoded = _reader.Decode(rawRgb, (int)_width, (int)_height, bitmapFormat); 

     if (decoded != null) 
     { 
      cde = decoded.Text; 
      Stop(); 

     } 

     _decoding = false; 
    }); 
    MeesageDialog msg = new MessageDialog(cde); 
    await msg.ShowAsync(); 
} 

答えて

0

をデコードする方法である私のコードですディスパッチャでコードを実行する必要があります。

CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher; 
await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
     { 
      MeesageDialog msg = new MessageDialog(cde); 
      await msg.ShowAsync(); 
     }); 

このコードを試してください(私はうまくいくはずです)。

関連する問題