我有一个Windows窗体桌面应用程序,它保存联系人详细信息。关闭应用程序时,应用程序将联系人数据存储如下,
private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
Properties.Settings.Default.ApplicationData = mydata;
Properties.Settings.Default.Save();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
当应用程序启动时,它会加载数据,如下所示
try
{
this.mydata = (DataHandeler) Properties.Settings.Default.ApplicationData;
}
catch (NullReferenceException)
{
mydata = new DataHandeler();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
mydata = new DataHandeler();
}
SettingsSerializeAs已添加到Settings.Designer.cs中,如下所示,
[全球:: System.Configuration.UserScopedSettingAttribute()] [全局:: System.Diagnostics.DebuggerNonUserCodeAttribute()] [global :: System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
public object ApplicationData {
get {
return ((object)(this["ApplicationData"]));
}
set {
this["ApplicationData"] = value;
}
但每次关闭并重新打开应用程序后,应用程序无法恢复已存储的数据。当应用程序尝试加载数据时,抛出Nullreferenceexception。如何恢复数据?
答案 0 :(得分:1)
保存或加载设置时是否会抛出异常?
设置是否实际保存到文件中? 在Windows Vista或7上,应该在名为:
的目录中有一个user.config文件C:\用户\ {USER_NAME} \应用程序数据\漫游\微软\ {project_or_assembly_name} \ {的version_number} \ user.config
您的DataHandeler
类是否可序列化?
This MSDN thread也可能有帮助。
答案 1 :(得分:0)
更改设置后,只需在设置中调用保存方法
像这样 Properties.Settings.Default.AppLaststarted = date;
Properties.Settings.Default.Save();
这将保存app.config文件,以便它将使用新设置。
答案 2 :(得分:0)
请注意,有两种不同范围的应用程序设置。用户级别设置不会保存在app.config文件中,因此我无法保存应用程序级别设置。