繁体   English   中英

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

[英]Xamarin Forms - Multiple ZXing windows being created

我在名为QRPage.xaml.cs的Xamarin Forms页面中有一个函数,该函数使用ZXing打开QR码阅读器

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用于once-off页面创建的函数吗?

    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);
            }

这是一个粗略的示例,可以用许多好的方法来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM