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();
}