Visual studio 2010 wp7:应用程序失败!不知道在哪里?
我想我已经在停用事件中将其缩小为以下代码: 事情是这样的。。。当我在代码中设置一个断点时,一切正常。应用程序不会失败。然而,当我去掉断点时,它失败了。我不明白的是为什么try/catch没有开火 我还应该注意,我对这个事件的所有内容都进行了注释,没有断点,应用程序运行良好。所以这是代码中的一些东西 是否可能是未保存对象的保存事件未完成,而当它尝试重新激活时,激活事件实际上是失败的事件??Visual studio 2010 wp7:应用程序失败!不知道在哪里?,visual-studio-2010,windows-phone-7,Visual Studio 2010,Windows Phone 7,我想我已经在停用事件中将其缩小为以下代码: 事情是这样的。。。当我在代码中设置一个断点时,一切正常。应用程序不会失败。然而,当我去掉断点时,它失败了。我不明白的是为什么try/catch没有开火 我还应该注意,我对这个事件的所有内容都进行了注释,没有断点,应用程序运行良好。所以这是代码中的一些东西 是否可能是未保存对象的保存事件未完成,而当它尝试重新激活时,激活事件实际上是失败的事件?? private void Application_Deactivated(object sender, De
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
//MessageBox.Show("deactivated");
try
{
//if ((Application.Current as App).infoSaved == false)
//{
unsaved unSavedPillInfo = new unsaved();
unSavedPillInfo.RXName = (Application.Current as App).appRXName;
unSavedPillInfo.RXNumber = (Application.Current as App).appRXNumber;
unSavedPillInfo.DosageNotes = (Application.Current as App).appDosageNotes;
unSavedPillInfo.Generic = (Application.Current as App).appGeneric;
unSavedPillInfo.Instructions = (Application.Current as App).appInstructions;
unSavedPillInfo.Reason = (Application.Current as App).appReason;
unSavedPillInfo.Quantity = (Application.Current as App).appQuantity;
unSavedPillInfo.Refills = (Application.Current as App).appRefills;
unSavedPillInfo.Doctor = (Application.Current as App).appDoctor;
unSavedPillInfo.DoctorNumber = (Application.Current as App).appDoctorNumber;
unSavedPillInfo.Pharmacy = (Application.Current as App).appPharmacy;
unSavedPillInfo.PharmacyNumber = (Application.Current as App).appPharmacyNumber;
unSavedPillInfo.OrigDate = (Application.Current as App).appOrigDate;
unSavedPillInfo.ReorderReminder = (Application.Current as App).appReorderReminder;
unSavedPillInfo.ReorderDate = (Application.Current as App).appReorderDate;
unSavedPillInfo.ConsumptionFrequency = (Application.Current as App).appConsumptionFrequency;
unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).perscriptionUpdated;
unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).doctorUpdated;
unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).detailsUpdated;
unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).pharmacyUpdated;
unSavedPillInfo.Save();
//}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
这并不完美,但请尝试在每个EventHandler中放置一个Messagebox。这样你就可以知道每个人什么时候开火,看是否有人没有开火 此外,您可能希望经常卸载应用程序以清除隔离的存储。如果您继续在同一安装上运行,则会产生问题 编辑:是的,从我遇到的情况来看,如果没有正确保存到独立存储,应用程序可能会挂起。如果您没有正确地从隔离存储加载数据,也可能发生这种情况。您可能想分别尝试每种方法。使用messagebox确保其正确保存和加载,因为VisualStudio将退出当前调试会话 更新您应该做的是创建一个名为unsavedpraction的全局变量。现在,当用户选择处方时,为他们选择的处方分配全局变量“unsave”。注意:当应用程序停用时,您不应该分配属性,因为它很可能无法完全保存,从而导致应用程序挂起。相反,您只需将所选处方分配给全局变量,并将App.xaml.cs中的代码更改为以下内容:
public unsaved unsavedPrescription {get; set;}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
//Open up IsolatedStorageSettings
IsolatedStorageSettings settings = Isolated StorageSettings.ApplicationSettings;
//Use a model to save prescription
//So create a name/value pair to store the prescription in isolatedstorage
//Notice we used the global variable
settings["UnsavedPrescription"] = unsavedPrescription;
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
//Now you can easily load the prescription you saved
//I'm reassigning the global variable that will contain the savedprescription
if(settings.TryGetValue("UnsavedPrescription", out prescription)
{
unsavedPrescription = prescription;
}
}
这大大简化了加载和保存代码的过程。此外,您还可以使用MessageBox进行测试,就像我前面所说的,这虽然不专业,但效果很好。另外,当应用程序试图停用时,您也没有运行太多的东西。这种方法将在我测试它时起作用。你在上面做的方式看起来就像你在应用程序停用时运行了很多代码,这可能就是它挂起的原因。这也解释了为什么当您删除它时,一切正常。我遇到了一个与您的问题类似的问题,它实际上与从IsolatedStorage本身保存/加载无关,而是与我在有限递归中设置/获取的属性有关。这导致应用程序在获取Catch语句之前终止 关闭调试器在属性上的单步执行可能是值得的: 工具->选项->调试器->跳过属性和运算符(仅限托管)
公共字典
{
得到
{
如果(_dictionary==null)
_字典=新字典();
返回字典;
}
设置
{
字典=值;
}
}
我在使用IsolatedStorage时,也曾遇到过一些问题。我建议您尝试注释掉代码,直到您能够确定问题的确切来源,然后发布该代码段,以便我们能够帮助您解决问题。@johnhforrest-我在这些事件中包装了一个try/catch块,现在没有断点,一切似乎都正常工作。idk。。。我觉得很奇怪。所以我想问题已经解决了,但我不知道为什么!:(如果您在没有重新启动仿真器的情况下对代码进行了更改,这可能是问题所在。关闭仿真器时,
IsolatedStorage
将被清除,因此您的程序可能一直在尝试以新格式或类似方式读取旧数据。很高兴您现在一切正常。您有机会吗主持整个项目?在app.xaml.cs文件中,你没有任何地方显示你保存/加载到IsolatedStore
的位置。我确信在那里的某个地方发生了异常。你是否使用DataContractSerializer
写入磁盘?@johnforrest-请参阅我的更新…因为调试器已被停用我的调试经历非常困难。有什么想法吗?谢谢你的想法。奇怪的是,当我在每个事件中加载/保存时都包装了一个try/catch,没有出现错误。那里肯定有错误,但调试器也没有捕获到它…@Jeff same这里。我唯一能知道的方法是messagebox是否分层。但没有出现错误。应用程序只是挂起。@Jeff您考虑过将数据保存到独立存储的其他方法吗?我使用了IsolatedStorageSettings,它通过键/值对保存值。请检查我的答案以获取更新。
public Dictionary<string, object> Dictionary
{
get
{
if (_dictionary == null)
_dictionary = new Dictionary<string, object>();
return _dictionary;
}
set
{
Dictionary = value;
}
}