2014-01-13 21 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) 
{ 

}