Xamarin-Device.BeginInvokeOnMainThread内部的函数未正确调用

时间:2018-06-29 11:12:57

标签: c# multithreading xamarin xamarin.forms invoke

我正在Xamarin中创建QR码,并在Device.BeginInvokeOnMainThread中调用QR码的生成,以便每次添加新输入时都可以动态更新QR码。

Device.BeginInvokeOnMainThread(async () =>
            {
                QRCodeView.IsVisible = true;
                QRCodeView = null;
                QRCodeView = new ZXingBarcodeImageView
                {
                    BarcodeFormat = BarcodeFormat.QR_CODE,
                    BarcodeOptions = new QrCodeEncodingOptions
                    {
                        Height = 150,
                        Width = 150,
                        PureBarcode = true
                    },
                    BarcodeValue = await SetQrContent(),

                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
            });

在我的函数SetQrContent()中,QR码被传递了新值。 但是,我认为此函数的调用为时已晚,因为新QR码的值未正确设置,导致输入更改时我的QR码不会改变。

我使用BeginInvokeOnMainThread错了吗?

1 个答案:

答案 0 :(得分:1)

更改QrContent时,仅尝试设置BarcodeValue

Device.BeginInvokeOnMainThread(async () =>
{
    // Don't reset the view, only reset the value on the barcode
    QRCodeView.BarcodeValue = await SetQrContent();
});

将控件添加到页面后,仅更改视图的属性,而不创建新视图。创建新的ZXingBarcodeImageView时,未将新视图添加到页面中,导致仍然看到旧数据。