【问题标题】:How to load view page before executing functions in Xamarin Forms?如何在 Xamarin Forms 中执行功能之前加载视图页面?
【发布时间】:2018-08-20 09:53:33
【问题描述】:

在执行任何功能之前如何加载视图页面?

应用程序:
1. 用户点击登录按钮
2. 我将导航到同步页面
3. 同步页面将在执行 6 个功能后执行六 (6) 个功能,它将重定向到我的主菜单页面

问题在于我的 1 号和 2 号进程。当用户单击登录按钮时,它将卡在我的登录页面中,然后直接转到我的主菜单页面。如何在重定向到主菜单页面之前查看同步页面。

public SyncPage (string host, string database, string contactID)
        {
            InitializeComponent();
            new Task(SyncSetup).Start();
        }

    async void SyncSetup()
    {
        Deletedata();
        InsertUserData(host, database, contactID);
        InsertCAFData(host, database, contactID);
        InsertContactsData(host, database, contactID);
        InsertActivityData(host, database, contactID);
        Device.BeginInvokeOnMainThread(() =>
        {
            // Assuming this function needs to use Main/UI thread to move to your "Main Menu" Page
            OnSyncComplete(host, database, contactID);
        });
    }   

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    我会将这些函数/进程移到单独的线程/任务中,一个超级简单的方法是使用 fire & forget Task 并让该任务处理这些设置过程,然后移回 UI 线程以移动您的“主菜单”页面。

    类似这样的:

    string contactID; string host; string database;
    public SyncPage (string contactID, string host, string database)
    {
        InitializeComponent();
        this.contectID = contactID; this.host = host; this.database = database;
        new Task(SyncSetup).Start(); // Or do this in OnAppearing override
    }
    
    protected override void OnAppearing()
    {
        base.OnAppearing();
        new Task(SyncSetup).Start(); // This could be an await'd task if need be
    }
    
    async void SyncSetup()
    {
        Deletedata();
        InsertUserData(host, database, contactID);
        InsertCAFData(host, database, contactID);
        InsertContactsData(host, database, contactID);
        InsertActivityData(host, database, contactID);
        Device.BeginInvokeOnMainThread(() =>
        {
            // Assuming this function needs to use Main/UI thread to move to your "Main Menu" Page
            OnSyncComplete(host, database, contactID);
        });
    }
    

    【讨论】:

    • 有一个错误我无法从SyncPage (string contactID, string host, string database)得到(host, database, contactID)
    • @lootverge 哈哈,需要更多咖啡 ;-) 在调用 Task.Start() 之前将这些参数保存到类级变量中。
    • 对不起,我是 xamarin 的新手,你能告诉我怎么做吗?请问?
    • @lootverge 更新了我的答案,有意义吗?
    • 只是为了清楚SyncPage (string contactID, string host, string database)里面的数据来自Application.Current.MainPage.Navigation.PushAsync(new SyncPage(hostName, database, contactID), true);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多