目前正在开发一个多线程的 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); }
}
我什至尝试了 BackgroundWorker 和 ThreadPool 而不是 Async CTP 3,但效果相同。我知道以前曾多次问过非常相似的问题,但我根本找不到任何解决方案来解决我的问题。有什么方法/程序可以找到导致异常的确切方法(原因,位置)?可以创建多少个线程是否有任何限制?可以以这种方式安全地使用 DataContext 吗?
非常感谢您的帮助。