MonoTouch FinishedLaunching方法应用程序被杀死

时间:2011-01-31 05:57:20

标签: c# iphone multithreading xamarin.ios

我的应用程序因为FinishedLaunching方法而被杀死是我的应用程序繁重的工作,我的问题是如何在没有用户交互的情况下填充来自Web服务的数据应用程序,我的意思是数据必须来自WS到设备,以便应用程序可用。

有没有办法创建一个新的线程或后台工作,所以FinishedLaunching可以返回,但后台的iPhone仍然是联系Web服务并下载所需的数据??

一个例子非常有用。

2 个答案:

答案 0 :(得分:5)

您可以使用C#异步调用,以MonoTouch的方式工作:

new Action(this.FetchDataFromWS).BeginInvoke(null, null);

但最佳做法是在主视图加载时从Web服务获取数据,而不是在FinishedLaunching中。

答案 1 :(得分:1)

@Dimitris' answer类似,虽然我沉迷于语法糖,但你可以通过(任务并行库)[http://msdn.microsoft.com/en-us/library/dd460717.aspx]分离lambda。任务还具有各种奇妙的延续,上下文和错误处理机会。

using System.Threading.Tasks;

Task.Factory.StartNew(() => {
    FetchDataFromWS();
});

我的Main.cs FinishedLoading方法中有类似的代码。当我在调试运行中遇到一个断点,然后进行了侧面追踪并跑去吃午饭时,我回来时仍然在等我,因为FinishedLoading早已回来了。公平警告:我还没有做过任何真实的事情。