Windows Phone 8.1应用程序在未调试异步等待时崩溃
本文关键字:异步 调试 等待 崩溃 Phone 应用程序 Windows | 更新日期: 2023-09-27 18:20:46
我正在开发Windows Phone 8.1应用程序。我已经开始这个项目大约一个月了,到目前为止,我所写的东西几乎没有问题。
我决定在不通过VS2013调试器运行应用程序的情况下对其进行一些测试。现在,由于某种原因,该应用程序在进入第一个屏幕之前就崩溃了。我没有收到任何异常或消息(我正在使用Raygun进行错误日志记录)。
我一直在使用异步方法(有些是async void,另一些是async Task),但所有这些都在调试时有效。
最主要的帮助是获得某种错误消息。我只能对代码的部分进行注释,但最终这并没有给我带来任何好处,因为当我认为我发现了问题时,我会在代码中再次崩溃。
有一次,我发现调用ListView.UpdateLayout()时出现了问题。我对此进行了评论,应用程序将正常运行,不会崩溃。然后我取消了对一些代码的评论,现在它又崩溃了。
如果有人知道从电话中获得例外的方法,或者有人以前遇到过这个问题,我们将不胜感激。我可以提供任何需要的进一步信息。
更新:我想我已经把问题缩小到了Sqlite.NET。我正在为WinRT使用Sqlite.NET以及一个名为SqliteNetExtensions的扩展。特殊声明是
DataContext.Context.Connection.Table<Message>().Where(m => m.ChannelID == channelID && m.ChannelID.Contains("C")).ToList();
如果我对此发表评论,该应用程序运行时不会出现任何问题。此LINQ语句最多返回100条记录。我不认为100条记录的SELECT语句会导致应用程序崩溃,但它似乎是罪魁祸首。关于如何优化Sqlite.NET有什么想法吗?
更新2:终于想通了!它根本不是SQLite。这根本不是我的密码。那是我的手机。我正在运行诺基亚Lumia Icon。几周前,我安装了Rudy Huyn的Lockscreen Beta。当我卸载它时,它引起了一些问题,但它与我的应用程序无关。今天,我让我的商业伙伴在他的手机上安装了我的应用程序,他有同样型号的手机。该应用程序大约快了50倍,没有崩溃。我从工厂恢复了我的手机,瞧,它运行得很好。所以,专业提示:不要安装鲁迪·休恩的锁屏贝塔!!!
顺便说一句,我会花时间确保您总是避免使用async void。有充分的证据表明,异步无效通常会带来麻烦。
这里有一篇关于缺点的好文章