如何在关闭并重新打开应用程序后保留Properties.Settings.Default.ApplicationData

时间:2010-12-28 11:33:00

标签: c# desktop-application

我有一个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。如何恢复数据?

3 个答案:

答案 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文件中,因此我无法保存应用程序级别设置。