我正在使用Xamarin.Forms,我已经实施了ZXing.Net.Mobile扫描条形码。
在Android上它工作正常,在iOS 10读取条形码后,函数“OnScanResult”被触发并执行命令Navigation.PopAsync()关闭扫描页面但是在一秒之后它还关闭了我当前的页面显示结果!
key = voqID+","+remoteModID
请帮助.. !! :)
答案 0 :(得分:1)
每次调用MyTapScan.Tapped时,您都会订阅MyScannerPage.OnScanResult,因此如果点击按钮5次,您的OnScanResult将被调用5次。我希望你现在知道如何解决这个问题。
可能的解决方案之一: 拿OnScanResult委托并使其成为单独的函数,比如说ScanFinished。然后而不是
MyScannerPage.OnScanResult += (result)
做
MyScannerPage.OnScanResult -= ScanFinished;
MyScannerPage.OnScanResult += ScanFinished;
然后,您可以确定在再次订阅之前取消订阅该事件
答案 1 :(得分:0)
我已经引入了一个新变量来检查扫描是否已经被触发,现在它正常工作并且符合预期。 这是代码:
MyTapScan.Tapped += async (sender, e) =>
{
await MyBtScan.ScaleTo(1.20, 100, Easing.Linear);
await MyBtScan.ScaleTo(1, 100, Easing.Linear);
await Task.Delay(50);
bool MyIsScanning = true;
//--------------------------------------------
MyAppLib.MyAppUtilitiesBarCodeReader MyBarCodeReader = new MyAppLib.MyAppUtilitiesBarCodeReader();
var MyScannerPage = MyBarCodeReader.GetBarCodeReaderPage();
//--------------------------------------------
MyScannerPage.OnScanResult += (result) => {
//Stop scanning
MyScannerPage.IsScanning = false;
//Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
if (MyIsScanning == true)
{
MyIsScanning = false;
MyMachSerialNumber.Text = result.Text;
Navigation.PopAsync();
}
});
};
//--------------------------------------------
//Display scanner
await Navigation.PushAsync(MyScannerPage);
};