2017-05-26 71 views
0

我在做一個Xamarin.iOS應用程序。阻止UI線程直到我的電話完成,然後繼續

我想在應用程序加載(預加載數據)之前從我的API中獲取客戶/購物數據,而不是在用戶使用應用程序時調用它。我想我需要將事情掛在AppDelegate中,這樣我才能保持它在啓動屏幕上停留,直到我的API調用完成。假設用戶在應用程序啓動時登錄。

我的異步方法,我是異步從應用程序的其他部分調用是:

public async Task<CustomerShoppingSummary> GetCustomerShoppingSummary() 

但是,這是我的viewDidLoad期間或在其他領域調用它。我現在想在應用程序啓動之前獲取所有這些信息。所以我不小心弄清了我要麼永久地掛起整個應用程序(使用.result,還沒有想出如何在完成時停止),或者讓它異步運行,但沒有運氣實現臨時同步運行的所需行爲,直到邏輯完成。

哪裏/你會推薦什麼方法我在AppDelegate中做到這一點?

也許

public override void OnActivated(UIApplication application) 

同步運行這個並阻止UI線程,直到完成任何建議?

謝謝!

+0

不要阻塞你的UI線程。在編程中並不常見,你可以說「那永遠不是一個好主意」,但是,嘿 - 永遠不要說永遠不會。 –

+0

我想在應用程序啓動之前加載我的數據 - 否則他們來到屏幕上,他們的數據不存在。 – NullHypothesis

+2

即使沒有數據,他們也應該看到一個實時的,響應式的用戶界面。如果你的應用程序在啓動時掛起,那麼用戶的體驗會比用微調控制器空虛。他們無論如何都在等待,但隨着你的想法,這更煩人。用戶討厭掛起的應用程序。 –

回答

1

我最終在主頁上使用了一個微調,只是因爲它看起來更好。

非常感謝所有人:)

+0

只是你知道。通常做的事情是創建一個擴展的啓動畫面,它是一個與啓動畫面完全相同的UIViewController。在這裏,您可以完成所有服務和數據初始化,然後完成後移至主屏幕。這很好,因爲在那裏你可以確保一切都準備好了,如果從那裏發生了一些事情,你就會進入錯誤頁面。 對不起,很長的評論。 – apineda

相關問題