2011-08-15 17 views
1

私は時には長い(5-25秒)処理をしなければならないWP7アプリを持っています。マンゴー高速アプリの切り替えと重い処理のクラッシュ

アプリが休眠状態に設定されているときに、(たとえば、ユーザーがWindowsボタンを押したり画面をロックしています)を処理中に、ユーザーが戻ったときにアプリがクラッシュします。

私はエミュレータと私のデバイスで同じ動作を試みました。

Visual Studioでデバッグモードで再現すると、クラッシュしないので、実際に何が起こっているのかを見つけるのは難しいです。

while (true) 
{ 
    System.Threading.Thread.Sleep(100); 
} 

私の質問は:何が無限ループを実行するクリックイベントのイベントハンドラを追加し、それを再現する新しいWindowsの携帯電話事業を開始し、MainPage.xamlを&上のボタンを追加するには

本当に起こっている?なぜクラッシュするのですか?速いアプリの切り替えがアプリのプロセスを一時停止してから再開するのではないですか?

編集: 重大なプロセスを実行すると、非アクティブ化された&のイベントは、私がアプリケーションに出入りするときに発生しないようです。

答えて

4

は、公式のWindows Phoneフォーラム(link)の答えを見つけました。それがクラッシュしたのはなぜ

:ここにそれはある

をアプリが無効化された時点から、それはそれが何をしているか仕上げる に正確に10秒を持っています。コードが10秒以上かかると、 はOSを終了します。

なぜ私がアプリで/出るとき無効&アクティブにイベントが発生しません。プロセスは、このまた、ブロックIメッセージ ディスパッチループをUIスレッドをそれほどブロックしている

場合これがあなたのアプリが決して のイベントを検出して処理する機会を与えない理由であると思われます。

1

あなたの問題は簡単です。 WP7 cantは、あなたがこの早い時間に大量の処理をしているときにあなたのスレッドを本当に休止状態にし、破損状態を保存します。再起動すると、この状態はクラッシュします。

デバッガはすべての処理を遅くしてからWP7に時間がかかるため、デバッガで動作します。ドキュメントから

ユーザーが前方に移動すると非アクティブ化イベントが発生した後、離れアプリケーションから、オペレーティングシステムが休止状態にアプリケーションを入れしようとします。この状態では、アプリケーションのスレッドはすべて停止し、処理は行われませんが、アプリケーションはメモリ内にそのまま残ります。この状態からアプリケーションを再起動すると、アプリケーションは保持されているため、状態を再作成する必要はありません。

出典:http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx

+0

重い処理の下で、WP7はスレッドを休止状態にできないことがわかりましたか? –

関連する問題