2011-01-31 3 views
2

私のアプリケーションは、FinishedLaunchingメソッドのために殺されます。私のアプリケーションの重い持ち物です。私の質問は、ユーザーインタラクションなしのWebサービスからのデータのアプリケーションをどのように埋め込むことができますか?アプリケーションが使用できるように、WSからデバイスに送らなければなりません。MonoTouch FinishedLaunchingメソッドアプリケーションが取得される

FinishedLaunchingが戻ることができるように新しいスレッドまたはバックグラウンドワーカーを作成する方法はありますか?バックグラウンドのiphoneはまだWebサービスに接続し、必要なデータをダウンロードしていますか?

例が非常に便利です。

答えて

5

あなたがC#の非同期呼び出しを使用することができ、MonoTouchでにそれが必要な方法作品:

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

をしかし、ベストプラクティスではありませんFinishedLaunchingで、ときにメインビューをロードWebサービスからデータを取得することです。

+0

「モーダルロードの表示」を表示するにはどうすればよいですか?私はモーダルビューのコードを持っていますが、私はアプリがWSダウンロードでフリーズすることなくそれを表示する方法を知らない –

+0

同じC#の方法で。あなたがUIを使って何かしたいので、WinFormsのようにメインスレッド上で実行する必要があるので、FinishedLaunchingの中で:new Action(this.LoadModalView).BeginInvoke(null、null); "LoadModalView"メソッドの内部でthis.BeginInvokeOnMainThread(delegate {// bla bla;});でコードをラップします。 –

+0

もちろん、私はあなたがFinishedLaunchingではなく、ロードする最初のView Controllerで行うべきであることを示唆していません。 –

1

@Dimitris' answerと同じように、私は構文砂糖に酔っていますが、この方法では、(タスク並列ライブラリ)[http://msdn.microsoft.com/en-us/library/dd460717.aspx]]でラムダをスピンさせることができます。タスクには、あらゆる種類の素晴らしい継続、コンテキスト、エラー処理の機会もあります。

using System.Threading.Tasks; 

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

私のMain.cs FinishedLoadingメソッドにも同様のコードがありました。私がデバッグ実行時にブレークポイントを押して、サイドトラッキングをして昼食に走ったとき、戻ってきたときにはまだFinishedLoadingが返されていたので、それは私を待っていました。公正な警告:私はまだこれで実世界を何もしていません。