我有一个Xamarin.Forms应用程序。我使用ZXing.Mobile.Forms来扫描QR码;但是,当我将相机指向QR码时,OnScanResult
事件被调用两次。这是我的代码,忠实再现了建议的here:
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时。如果我在没有附加调试器的情况下启动应用程序,则会触发一次事件。
答案 0 :(得分:1)
我有同样的问题,这个答案帮我解决了:Xamarin.Forms ZXing.Net.Mobile loosing current page after scan result on iOS 10
您的代码应为:
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);
}
我在iOS 10.3.1和ZXing.Net.Forms.Mobile 2.2.9上进行了测试。