0

我正在使用 zxing 扫描仪,它工作得很好,但由于某种原因,它扫描了两次相同的条形码。我已经设置了一个线程延迟以尝试保持视口打开,但让操作员有时间将设备从条形码上移开,但运气不好,他们报告了两次扫描项目,但我们不想关闭视口.

但要添加我不想关闭 ZXingScannerView 只是暂停它给用户足够的时间来准备下一个条形码

下面的代码是在一个按钮的按钮点击下,他们没有点击按钮两次,即使扫描两次。

ZXingDefaultOverlay overlay;        
ZXingScannerView zxing;  
zxing = new ZXingScannerView
{
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
            AutomationId = "zxingScannerView",
};


zxing.OnScanResult += (result) =>
Device.BeginInvokeOnMainThread(async () =>
{               

    BarCode = result.Text;

    await PlayBeep();
    await Task.Delay(2000); //This is the delay I was given so that it would not scan right away again but leave the view open
    overlay = new ZXingDefaultOverlay
        {
            TopText = "Hold your phone up to the barcode",
            BottomText = "Scanning will happen automatically",
            ShowFlashButton = zxing.HasTorch,
            AutomationId = "zxingDefaultOverlay",

        };
        var grid = new Grid
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
        };
        grid.Children.Add(zxing);
        grid.Children.Add(overlay);

        // The root page of your application
        Content = grid;
}
4

2 回答 2

0

对于其他任何人,您可以使用 zxing 选项函数 DelayBetweenContinuousScans

zxing = new ZXingScannerView
{
     HorizontalOptions = LayoutOptions.FillAndExpand,
     VerticalOptions = LayoutOptions.FillAndExpand,
     AutomationId = "zxingScannerView",
};
zxing.Options = new MobileBarcodeScanningOptions()
{
  DelayBetweenContinuousScans = 2000
};
于 2019-10-25T20:09:30.027 回答
-1

我这样做了,把scanPage.IsScanning = false; 防止两次阅读器

    ZXingScannerPage scanPage;
    SendData sd;

    private async void Btnpe001_Clicked(object sender, System.EventArgs e)
    {
        scanPage = new ZXingScannerPage();
        sd = new SendData();

        await Navigation.PushAsync(scanPage);

        scanPage.OnScanResult += (result) =>
        {
            scanPage.IsScanning = false;

            Device.BeginInvokeOnMainThread(async () =>
            {
                sd.Action = "personentry";
                sd.DataToSend = result.Text;
                await sd.SendAsync();

                await Navigation.PopAsync();
                await DisplayAlert("Autenticado", result.Text, "OK");

            });
        };

    }
于 2019-10-25T17:42:57.590 回答