可以停止或处置 ZXing 以便我可以再次使用它吗?

Can ZXing be stopped or dispose so i can use it again?

我使用 ZXing.Net.Mobile 来制作这样的表格

                    var scanPage = new ZXingScannerPage();

                    scanPage.OnScanResult += (result) => {
                        // Stop scanning
                        scanPage.IsScanning = false;
                        // Pop the page and show the result
                        Device.BeginInvokeOnMainThread(async () => {
                          //  await Navigation.PopAsync();
                            await Navigation.PushModalAsync(new Pages.DataGridPage(PladsId));

                        });
                    };

来自https://components.xamarin.com/gettingstarted/zxing.net.mobile.forms

但是在我扫描一次之后,当我再次尝试时,carmera 被冻结了 我已经尝试 Dispose/stop 扫描仪但没有成功

可以停止或处理 ZXing 以便我可以再次使用它吗?

我使用 visual studio 2015 社区,xamarin.Forms 2.3.3.168,Syncfusion 14.4.0.15 和 ZXing.Net.Mobile 2.1.47。 运行 它在 Android 版本 6.0.1 和使用 API 23

的索尼 xperia z3 上

非常感谢任何帮助

为什么不将它与异步一起使用?完成扫描后,它 returns 我回到导航堆栈中。看起来您使用的是通用扫描仪页面,因此可以使用以下解决方案。

var scanner = new ZXing.Mobile.MobileBarcodeScanner();

var result = await scanner.Scan();

if (result != null)
{
    variableToAssign = result.Text;
}

找到解决方案....

Use IsScanning=true only once... In ScannerView Constructor or in OnAppearing of the Page..

_zxing = new ZXingScannerView
    {
        VerticalOptions = LayoutOptions.Center,
        HorizontalOptions = LayoutOptions.Center,
        HeightRequest = 250,
        WidthRequest = 250,
        IsAnalyzing = true,
        IsScanning = true,

    };

Don't write anything in OnDisappearing...

protected override void OnDisappearing()
{
   // _zxing.IsScanning = false;
    base.OnDisappearing();

}

扫描完成后 IsAnalysing 设置为 false,应在 OnAppearing 中设置为 true...

_zxing.OnScanResult += (result) =>       
Device.BeginInvokeOnMainThread(async () =>
{
     if (!string.IsNullOrWhiteSpace(result.Text))
     {
         _zxing.IsAnalyzing = false;
         await OnGettingResult(result.Text);
     }
});

protected override void OnAppearing()
{
    base.OnAppearing();
    _zxing.IsAnalyzing = true;

   //Not required if already set while intialization
   //_zxing.IsScanning = true;

}

如果像我一样,您希望扫描器在扫描一次后不关闭,或者只扫描一次相同的代码,那么您想要检查您是否已经扫描了特定的二维码。

var options = new MobileBarcodeScanningOptions();
var scans = new HashSet<string>();

options.PossibleFormats.Add(ZXing.BarcodeFormat.QR_CODE);
ZXingScannerPage scanPage = new ZXingScannerPage(options);
scanPage.Title = "Scan QR Code";

scanPage.OnScanResult += (result) =>
{
    //Only scan a particular QR code once
    if (!scans.Contains(result.Text))
    {
        scans.Add(result.Text);

        //etc
    }
}

有一个解决方法应该在您的页面开始时起作用,并且您将取消订阅的操作开始

scanPage.OnScanResult -= YourAction();

操作完成后您应该再次订阅扫描

scanPage.OnScanResult += YourAction();