2014-01-13 20 views
0

我有一種情況,應用程序啓動後,我必須調用Web服務以將未保存的數據發回服務器,同時繼續訪問應用程序。我應該能夠導航到不同的視圖,執行UI任務。 我可以使用任務在訪問UI時在後臺調用Web服務

Task CallWebService() 
{ 
    return Task.Factory.StartNew(() => { 
     // make your service call. 
    }); 
} 
CallWebService().ContinueWith(task => { 

    if(task.isFaulted) 
     throw new AggregateException(task.Exception.InnerException.Message); 

    // Runs when the task is finished 
    InvokeOnMainThread(() => { 
     // Hide your activity indicator here. 
     StopActivityIndicator(); 
    }); 

}); 

我不知道在哪裏調用InvokeOnMainThread因爲用戶可以在任何觀點。我們如何處理這個問題。

+0

你是什麼意思,你不知道在哪裏打電話給它?就像在什麼文件中,什麼方法,應用程序的哪一部分? – valdetero

+0

我不知道如何處理它。我的邏輯是每2分鐘檢查一次數據庫中是否有任何未保存的內容,如果有,請在後臺調用Web服務而不影響用戶活動。因爲在調用Web服務時用戶可以在任何視圖中。那麼在InvokeOnMainThread()中,我不知道哪個主要的UI線程。 – User382

+2

您可以從後臺線程調用InvokeOnMainThread。你爲什麼關心哪個視圖是活動的?你有什麼問題?當線程完成時你想做什麼 - 停止活動指示器?或者是其他東西? – Jason

回答

0

我將使用事件處理程序(或使用依賴關係解析程序)將靜態類創建爲下載程序。在您的視圖控制器重寫ViewDidAppear和ViewDidDisappear您將訂閱和取消訂閱事件。

0

在您的AppDelegate.cs中,您可以將您的「任務」添加到FinishedLaunching覆蓋和OnActivated覆蓋,假設您有一種方法來確定是否有任何「未保存」的數據需要發送到服務器。

public override void OnActivated (UIApplication application) 
{ 

} 
public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
{ 

}