如何暂停 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;
        }
    });
};