使用zxing检测条形码后打开新页面:CameraBarcodeReaderView抛出COMException

问题描述 投票:0回答:1

我有一个普通的条形码阅读器应用程序,它尝试使用搜索结果导航到新页面,但我收到了这个奇怪的 COMException,我根本不明白。

MainPage.xaml:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.App.MainPage"
             xmlns:local="clr-namespace:MyApp.App"
             xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
    <ContentPage.BindingContext>
        <local:BarcodeScannerBindingContext />
    </ContentPage.BindingContext>
    <VerticalStackLayout
        Padding="30,0"
        Spacing="25">
        <zxing:CameraBarcodeReaderView
            x:Name="cameraBarcodeReaderView"
            BarcodesDetected="OnBarcodesDetected"
            IsDetecting="{Binding IsDetectingInternal}"
            IsEnabled="{Binding IsDetectingInternal}" />
    </VerticalStackLayout>

</ContentPage>

MainPage.xaml.cs:

private async void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
{
    if (e.Results.Count() > 0)
    {
        BindingContext.IsDetectingInternal = false;
        string barcode = e.Results[0].Value;

        await Navigation.PushAsync(new ResultsPage(barcode)); //Throws COMException
    }
}

堆栈跟踪:

 在 WinRT.ExceptionHelpers.g__Throw|39_0(Int32 小时)
   在 ABI.Microsoft.UI.Xaml.Controls.ICommandBarMethods.get_PrimaryCommands(IObjectReference _obj)
   在 Microsoft.UI.Xaml.Controls.CommandBar.get_PrimaryCommands()
   在 Microsoft.Maui.Controls.Toolbar.UpdateMenu()
   在 Microsoft.Maui.Controls.Toolbar.MapToolbarItems(IToolbarHandler arg1,工具栏 arg2)
   在 Microsoft.Maui.PropertyMapperExtensions.c__DisplayClass2_0`2.b__0(TViewHandler h, TVirtualView v, Action`2 p)
   在 Microsoft.Maui.PropertyMapperExtensions.c__DisplayClass1_0`2.g__newMethod|0(IElementHandler 处理程序,IElement 视图)
   在 Microsoft.Maui.PropertyMapper`2.c__DisplayClass5_0.b__0(IElementHandler h, IElement v)
   在 Microsoft.Maui.PropertyMapper.UpdatePropertyCore(字符串键,IElementHandler viewHandler,IElement virtualView)
   在 Microsoft.Maui.PropertyMapper.UpdateProperty(IElementHandler viewHandler,IElement virtualView,字符串属性)
   在 Microsoft.Maui.Handlers.ElementHandler.UpdateValue(字符串属性)
   在 Microsoft.Maui.Controls.Toolbar.SetProperty[T](T& backingStore, T value, String propertyName)
   在 Microsoft.Maui.Controls.Toolbar.set_ToolbarItems(IEnumerable`1 值)
   在 Microsoft.Maui.Controls.NavigationPageToolbar.ApplyChanges(NavigationPage navigationPage)
   在 Microsoft.Maui.Controls.NavigationPageToolbar.NavigationPageChildrenChanged(Object s, ElementEventArgs a)
   在 Microsoft.Maui.Controls.Element.OnChildAdded(Element child)
   在 Microsoft.Maui.Controls.VisualElement.OnChildAdded(元素子级)
   在 Microsoft.Maui.Controls.Element.InsertLogicalChild(Int32 索引,Element 元素)
   在 Microsoft.Maui.Controls.Page.InternalChildrenOnCollectionChanged(对象发送者,NotifyCollectionChangedEventArgs e)
   在 System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
   在 Microsoft.Maui.Controls.NavigationPage.PushPage(页面页面)
   在 Microsoft.Maui.Controls.NavigationPage.MauiNavigationImpl.c__DisplayClass9_0.b__0()
   在 Microsoft.Maui.Controls.NavigationPage.d__100.MoveNext()
   在 MyApp\MyApp.App\MainPage.xaml.cs 中的 MyApp.App.MainPage.d__3.MoveNext() 处:第 45 行

P.S.:

BarcodeScannerBindingContext
的代码取自这里

问题:我需要关闭扫描仪吗?如果需要,如何关闭?

c# maui zxing
1个回答
0
投票

所以,这是一个线程问题。是什么解决了这个问题(感谢@IV.的输入):

private void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
{
    if (e.Results.Count() > 0)
    {
        BindingContext.IsDetectingInternal = false;
        string barcode = e.Results[0].Value;
 
        Action action = () => {
            Navigation.PushAsync(new ResultsPage(barcode));
        };

        App.Current.Mainpage.Dispatcher?.DispatchAsync(action);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.