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

时间:2018-08-20 01:31:00

标签: xamarin xamarin.forms

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

应用流程:
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);
        });
    }   

1 个答案:

答案 0 :(得分:2)

我会将这些功能/过程移至单独的线程/任务,一种超简单的方法是使用即发即弃任务,让该任务处理那些设置过程,然后移回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);
    });
}