我在名为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
页面的错误函数?
答案 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);
}
这是一个粗略的例子,它可以用很多好方法完成。