2017-08-03 107 views
0

我正在使用ZXing条形码阅读器,所以当用户扫描错误的条形码时,会弹出警报消息,说这是错误的条形码。问题是,扫描器不断扫描警报消息,并不断弹出相同的警报。我希望扫描仪暂停,直到用户关闭警报消息。那是我的代码,顺便说一句,zxing.IsAnalyzing = false;不起作用如何暂停ZXing阅读,直到用户关闭Xamarin Forms中的提醒消息?

zxing = new ZXingScannerView 
      { 
       HorizontalOptions = LayoutOptions.FillAndExpand, 
       VerticalOptions = LayoutOptions.FillAndExpand, 
       AutomationId = "zxingScannerView", 
      }; 


      zxing.OnScanResult += (result) => 
      { 

       Device.BeginInvokeOnMainThread(async() => 
       { 
        if (!result.Text.Equals(auftrag.code)) 
         { 
         zxing.IsAnalyzing = false; 
          await DisplayAlert("Barcode nicht gefunden.", "Der Barcode gehört nicht zu dem gewählten Auftrag.", "OK"); 

         } 
         else 

         await Navigation.PushAsync(new AuftragDescription(auftrag)); 
         } 
       }); 
      }; 

回答

2

您可以通过添加名为_isScanning的bo​​ol字段并将其设置为true来解决您的问题。当Zxing“触发”OnScanResult它将检查_isScanning是否为真,它会将扫描和分析设置为false,并且它将执行您的工作检查代码或其他您想要的事情,完成后它将回退分析和扫描为true,您将继续扫描其他条形码。

Zxing一直在扫描,但当您显示DisplyAlert时,它不会中断您。

希望这不是令人困惑,这是完成您的需求最简单的方法。

下面是代码:

// add this bool field in your class 
private bool _isScanning = true; 
// ... 
// your other code... 
// ... 

zxing = new ZXingScannerView { 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    VerticalOptions = LayoutOptions.FillAndExpand, 
    AutomationId = "zxingScannerView", 
}; 


zxing.OnScanResult += (result) => { 

    Device.BeginInvokeOnMainThread(async() => { 

     if (_isScanning) { 
      _isScanning = false; 
      zxing.IsAnalyzing = false; 

      if (!result.Text.Equals(auftrag.code)) { 
       await DisplayAlert("Barcode nicht gefunden.", "Der Barcode gehört nicht zu dem gewählten Auftrag.", "OK"); 

      } else 

        await Navigation.PushAsync(new AuftragDescription(auftrag)); 
      } 

      zxing.IsAnalyzing = true; 
      _isScanning = true; 
     } 
    }); 
}; 
+0

,你是王的人,感谢它的工作 – Mohanad

+0

我很高兴它为你工作,也不要忘了补投给了答案,如果你认为我活该。最好的祝福! –

+0

我希望但我的声望仍然是10,它需要15 .. – Mohanad