2017-03-25 21 views
0

私はXamarin.Formsアプリケーションを持っています。私はZXing.Mobile.Formsを使ってQRコードをスキャンします。しかし、カメラをQRコードに向けるとOnScanResultイベントが2回呼び出されます。これは、私のコードである1の忠実な再現がhereを提案:ZXing OnScanResultがXamarin.Formsで2回呼び出されました

private async void onScanQRCode(object sender, EventArgs e) 
    { 
     var scanPage = new ZXingScannerPage(); // executed just once 

     scanPage.OnScanResult += (result) => { 
      // Stop scanning 
      scanPage.IsScanning = false; // executed twice (confused) 

      // Pop the page and show the result 
      Device.BeginInvokeOnMainThread(() => { 
       Navigation.PopAsync(); 
       /* Business code */ 
       Account scannedAccount = URLInterpreter.Accept(result.Text); 
       ViewModel.ProcessNewAccount(scannedAccount); 
       /* End of business code */ 
      }); 
     }; 

     // Navigate to our scanner page 
     await Navigation.PushAsync(scanPage); 
    } 

そして、これは上記のメソッドを呼び出すボタンのXAMLです:

 <Button x:Name="btnScanCode" Text="Scan QR Code" Clicked="onScanQRCode" /> 

任意のポインタ?

更新日明らかに、これはアプリをデバッグしていて、電話機がVisual Studioに接続されている場合にのみ発生します。デバッガをアタッチせずにアプリを起動すると、そのイベントは1回だけ発生します。

答えて

0

私は同じ問題を持っていた、この答えは、それを解決するために私を助け:Xamarin.Forms ZXing.Net.Mobile loosing current page after scan result on iOS 10

あなたのコードは次のようになります。私はiOSの10.3.1とZXing.Net.Forms.Mobile上でテスト

private async void onScanQRCode(object sender, EventArgs e) 
{ 
    var scanPage = new ZXingScannerPage(); 
    bool scanFinished = false; 

    scanPage.OnScanResult += (result) => { 
     // Stop scanning 
     scanPage.IsScanning = false; 

     // Pop the page and show the result 
     Device.BeginInvokeOnMainThread(async() => { 
      if (!scanFinished) 
      {    
       scanFinished = true; 
       Account scannedAccount = URLInterpreter.Accept(result.Text); 
       ViewModel.ProcessNewAccount(scannedAccount); 
       await Navigation.PopAsync(); 
      } 
     }); 
    }; 

    // Navigate to our scanner page 
    await Navigation.PushAsync(scanPage); 
} 

2.2.9。

関連する問題