【发布时间】:2019-10-25 15:10:44
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
这很可能是一个可怕的 hack(这里没有 Xamarin 经验),但您可以将匿名 OnScanResult 处理程序移动到单独的方法并将该方法注册为处理程序。然后是 hacky 部分:在方法 _de_register 中,在开始时处理处理程序,进行扫描,然后延迟并在方法结束之前重新注册处理程序。
-
@MarkusDeibel 谢谢马克我会先等几个回复,但我确实明白你的意思,但你需要使用设备调用,所以你这样做
-
@MarkusDeibel 我应该说这是点击按钮
-
@MarkusDeibel 构造函数是否在 xamrain 表单中被调用两次?。
标签: c# xamarin.forms zxing.net