如何暂停 ZXing 阅读,直到用户关闭 Xamarin Forms 中的警报消息?
How to pause ZXing reading untill the user close the alert message in Xamarin Forms?
我正在实施 ZXing 条形码 reader ,所以当用户扫描错误的条形码时,会弹出一条警告消息,说这是错误的条形码。问题是,扫描仪在警告消息后面不断扫描并不断弹出相同的警告。我希望扫描仪暂停,直到用户关闭警报消息。这就是我的代码,顺便说一下,zxing.IsAnalyzing = false;不工作
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));
}
});
};
您可以通过添加名为 _isScanning 的 bool 字段并将其设置为 true 来解决您的问题。当 Zxing
"triggers" OnScanResult
时,它会检查 _isScanning
是否为真,它会将扫描和分析设置为假,它会做你的工作检查代码或其他事情你想要的,完成后它会将 Analyzing and Scanning 设置回 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;
}
});
};
我正在实施 ZXing 条形码 reader ,所以当用户扫描错误的条形码时,会弹出一条警告消息,说这是错误的条形码。问题是,扫描仪在警告消息后面不断扫描并不断弹出相同的警告。我希望扫描仪暂停,直到用户关闭警报消息。这就是我的代码,顺便说一下,zxing.IsAnalyzing = false;不工作
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));
}
});
};
您可以通过添加名为 _isScanning 的 bool 字段并将其设置为 true 来解决您的问题。当 Zxing
"triggers" OnScanResult
时,它会检查 _isScanning
是否为真,它会将扫描和分析设置为假,它会做你的工作检查代码或其他事情你想要的,完成后它会将 Analyzing and Scanning 设置回 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;
}
});
};