如何暂停 ZXing 阅读直到用户关闭 Xamarin Forms 中的警报消息?

Moh*_*nad 1 c# zxing xamarin.forms

我正在实现 ZXing 条形码阅读器,因此当用户扫描错误的条形码时,会弹出一条警报消息,表明这是错误的条形码。问题是,扫描仪不断扫描警报消息后面并不断弹出相同的警报。我希望扫描仪暂停,直到用户关闭警报消息。这就是我的代码,顺便说一下, zxing.IsAnalyzing = false; 不管用

\n\n
 zxing = new ZXingScannerView\n            {\n                HorizontalOptions = LayoutOptions.FillAndExpand,\n                VerticalOptions = LayoutOptions.FillAndExpand,\n                AutomationId = "zxingScannerView",\n            };\n\n\n            zxing.OnScanResult += (result) =>\n            {\n\n                Device.BeginInvokeOnMainThread(async () =>\n                {\n                    if (!result.Text.Equals(auftrag.code))\n                        {\n                        zxing.IsAnalyzing = false;\n                            await DisplayAlert("Barcode nicht gefunden.", "Der Barcode geh\xc3\xb6rt nicht zu dem gew\xc3\xa4hlten Auftrag.", "OK");\n\n                        }\n                        else\n\n                        await Navigation.PushAsync(new AuftragDescription(auftrag));\n                        }\n                });\n            };\n
Run Code Online (Sandbox Code Playgroud)\n

Alm*_*Vuk 5

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

\n\n

Zxing 会一直进行扫描,但当您显示DisplyAlert.

\n\n

希望这不会造成混淆,这是实现您的需求的最简单的方法。

\n\n

这是代码:

\n\n
// add this bool field in your class\nprivate bool _isScanning = true;\n// ... \n// your other code...\n// ... \n\nzxing = new ZXingScannerView {\n    HorizontalOptions = LayoutOptions.FillAndExpand,\n    VerticalOptions = LayoutOptions.FillAndExpand,\n    AutomationId = "zxingScannerView",\n};\n\n\nzxing.OnScanResult += (result) => {\n\n    Device.BeginInvokeOnMainThread(async() => {\n\n        if (_isScanning) {\n            _isScanning = false;\n            zxing.IsAnalyzing = false;\n\n            if (!result.Text.Equals(auftrag.code)) { \n                await DisplayAlert("Barcode nicht gefunden.", "Der Barcode geh\xc3\xb6rt nicht zu dem gew\xc3\xa4hlten Auftrag.", "OK");\n\n            } else\n\n                  await Navigation.PushAsync(new AuftragDescription(auftrag));\n            }\n\n            zxing.IsAnalyzing = true;\n            _isScanning = true;\n        }\n    });\n};\n
Run Code Online (Sandbox Code Playgroud)\n