Xamarin 中 QR 扫描后的处理对话框

编程入门 行业动态 更新时间:2024-10-28 13:26:14
本文介绍了Xamarin 中 QR 扫描后的处理对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我在 Xamarin 应用程序中使用 QR 码扫描仪,当它扫描二维码时,它会执行一些大约需要一分钟的操作,在执行操作时,我想在屏幕上显示一个加载对话框.但是,它没有显示在屏幕上,在应用程序的其他地方,它运行良好.

I'm using QR Code Scanner in Xamarin App, when it scans the qr code, there are some operation it does which takes about a minute, while it's performing operation, I want to show a loading dialog on the screen. But, it isn't showing on the screen, and elsewhere in the app, it's working perfectly.

代码

var expectedFormat = ZXing.BarcodeFormat.QR_CODE;
var opts = new ZXing.Mobile.MobileBarcodeScanningOptions { PossibleFormats = new List<ZXing.BarcodeFormat> { expectedFormat } };
var scanner = new ZXing.Mobile.MobileBarcodeScanner();
var result = await scanner.Scan(opts);
if (result == null)
{
    // code

    return null;
}
else
{
    using (UserDialogs.Instance.Loading("Processing"))
    {
        // code
    }
}

更新代码示例

public async Task Verification(object sender, EventArgs e)
{
    try
    {
        var expectedFormat = ZXing.BarcodeFormat.QR_CODE;
        var opts = new ZXing.Mobile.MobileBarcodeScanningOptions { PossibleFormats = new List<ZXing.BarcodeFormat> { expectedFormat } };
        var scanner = new ZXing.Mobile.MobileBarcodeScanner();
        var result = await scanner.Scan(opts);
        if (result == null)
        {
            // Code
            
            return null;
        }
        else
        {
            try
            {
                // QR Scan Result
                string qr_scan = result.Response;

                var result = JsonConvert.DeserializeObject<QRScan>(qr_scan);

                await CreateConnection();
            }
            catch (Exception error)
            { }
            finally
            {
                // navigate to next page
                await NavigationService.NavigateToAsync<NextViewModel>();
            }
        }
    }
    catch (Exception error)
    { }

    return null;
}

public async Task CreateConnection()
{
    UserDialogs.Instance.Loading("Processing");
     
    if ()
    {
        try
        {
            // Code
        }
        catch (Exception error)
        {
            // Code
        }
        finally
        {
            await CreateFolder(default, default);
        }
    }
}

public async Task CreateFolder(object sender, EventArgs e)
{
    UserDialogs.Instance.Loading("Processing");

    try
    {
        // Code
    }
    catch (Exception error)
    {
        // Code
    }

    return null;
}  

推荐答案

您可以使用 Xamarin.Essentials' MainThread 类,更具体地说 - InvokeOnMainThreadAsync 方法.此方法的想法不仅是在 UI/主线程上执行代码,而且还等待它的代码.这样你就可以同时拥有异步/等待逻辑和主线程执行.

You can use Xamarin.Essentials' MainThread class and more specifically - the InvokeOnMainThreadAsync method. The idea of this method is to not only execute a code on the UI/main thread, but to also to await it's code. This way you can have both async/await logic and main thread execution.

try
{
    // QR Scan Result
    string qr_scan = result.Response;
    var result = JsonConvert.DeserializeObject<QRScan>(qr_scan);
    await MainThread.InvokeOnMainThreadAsync(() => CreateConnection());
}
catch (Exception error)
{ }
finally
{
    // navigate to next page
    await NavigationService.NavigateToAsync<NextViewModel>();
}

请记住,如果方法 CreateConnection 需要很长时间才能执行,那么最好在主线程上仅执行对话框演示文稿 (UserDialogs.Instance.Loading("")).

Keep in mind that if the method CreateConnection takes a long time to execute, then it would be better to execute on the main thread only the dialog presentation (UserDialogs.Instance.Loading("")).

这篇关于Xamarin 中 QR 扫描后的处理对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-04-24 18:58:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1070209.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对话框   Xamarin   QR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!