現在、マルチスレッド WP 7.1.1 アプリケーションで作業しており、「初期段階」で例外をスローせずにアプリケーションが終了する時間の半分強をわずかに上回っています。これは、すべてのスレッドが 0x0 を返し、Closing/Exit/Quit イベントを入力せずに単純に終了します。
...
The thread '<No Name>' (0xfde00d2) has exited with code 0 (0x0).
The thread '<No Name>' (0xe860116) has exited with code 0 (0x0).
The thread '<No Name>' (0xfdf00c6) has exited with code 0 (0x0).
The thread '<No Name>' (0xf8d012e) has exited with code 0 (0x0).
The thread '<No Name>' (0xfd5010e) has exited with code 0 (0x0).
The thread '<No Name>' (0xfbc011a) has exited with code 0 (0x0).
The thread '<No Name>' (0xf9900ee) has exited with code 0 (0x0).
The program '[268042506] UI Task: Managed' has exited with code 0 (0x0).
EOL
「初期段階」とは正確にはどういう意味ですか? 「Windows Phone パフォーマンス分析」を使用してアプリのプロファイリングを行い、いくつかのデバッグ メッセージといくつかのログを合わせて、開始後約 3 ~ 4 秒と推定しました。彼の時点で、GUI はすでに非常に短い時間しか表示されていません。
次の呼び出しが原因で問題が発生することはほぼ確実です。
private static List<MyEntries> EntriesLoad()
{
using(var context = Context.ReadOnly) // <- works
{
return context.MyEntries.Where(m => !m.Deleted).OrderBy(m => m.Name).ToList(); // <- problem
}
}
private async void EntriesReload()
{
EntriesLoaded = false; // <- called
var entries = await TaskEx.Run<List<MyEntries>>(EntriesLoad); // <- called
EntriesLoaded = true; // <- only get's called 50% of the time/ otherwise app quits
}
DataContext でのマルチスレッドの問題を防ぐために、呼び出しごとに新しいコンテキストが作成されます。
public static Context ReadOnly
{
get { return new Context(ConnectionReadOnly); }
}
Async CTP 3 の代わりに BackgroundWorker と ThreadPool を試してみましたが、同じ効果がありました。非常によく似た質問が以前に何度も出されたことは知っていますが、私の問題に対する解決策はまだ見つかりませんでした。例外の原因となっている正確なメソッド (理由、場所) を見つける方法/プログラムはありますか? 作成できるスレッドの数に制限はありますか? この方法で DataContext を安全に使用できますか?
あなたの助けに感謝します。