Xamarin表单 - 正在创建多个ZXing窗口

时间:2017-04-19 07:09:25

标签: c# xamarin xamarin.forms zxing

我在名为QRPage.xaml.cs的Xamarin表单页面中有一个函数,它使用ZXing打开了一个二维码阅读器

protected override async void OnAppearing()
        {
            base.OnAppearing();
            var scanPage = new ZXingScannerPage();
            scanPage.OnScanResult += (result) => {
                // Stop scanning
                scanPage.IsScanning = false;

                // Pop the page and show the result
                Device.BeginInvokeOnMainThread(() => {
                    Navigation.PopAsync();
                    DisplayAlert("Scanned Barcode", result.Text, "OK");
                });
            };


            // Navigate to our scanner page
            await Navigation.PushAsync(scanPage);           
        }

在我的App.xaml.cs中,我的主页面也是QRPage.xaml.cs,具有上述功能

MainPage = new NavigationPage(new QRPage());

似乎多次调用此var scanPage = new ZXingScannerPage()await Navigation.PushAsync(scanPage),因为当我关闭它时,会弹出一个新的,当应用程序最初加载时,它会崩溃,除非我最小化并最大化申请。

我做错了什么? OnAppearing()是否用于创建once-off页面的错误函数?

1 个答案:

答案 0 :(得分:0)

    private bool alreadyScanned;
            protected override async void OnAppearing()
            {
                base.OnAppearing();
                if(alreadyScanned)
                    return;
                var scanPage = new ZXingScannerPage();
            scanPage.OnScanResult += (result) => {
                // Stop scanning
                scanPage.IsScanning = false;

                // Pop the page and show the result
                Device.BeginInvokeOnMainThread(() => {
                    Navigation.PopAsync();
                alreadyScanned = true;
                    DisplayAlert("Scanned Barcode", result.Text, "OK");
                });
            };
                await Navigation.PushAsync(page);
            }

这是一个粗略的例子,它可以用很多好方法完成。