gpt4 book ai didi

c# - 在运行时创建新设置并在重启后读取

转载 作者:行者123 更新时间:2023-11-30 16:10:19 26 4
gpt4 key购买 nike

我想存储用户设置。它们是在运行时创建的,应在重新启动应用程序后读取。

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
var property = new SettingsProperty("Testname");
property.DefaultValue = "TestValue";
Settings.Default.Properties.Add(property);
Settings.Default.Save();
}

此时,设置已存储,我可以访问它。

重启应用后,新创建的设置消失了:

public MainForm()
{
InitializeComponent();

foreach (SettingsProperty property in Settings.Default.Properties)
{
//Setting which was created on runtime before not existing
}
}

尝试这一段:Settings.Default.Reload(); 对结果没有任何影响。我还尝试了其他类似 here 描述的东西,但他们都不适合我。

最佳答案

对你来说可能有点晚了,但对其他人来说有 2 个部分。

  1. 保存新的用户设置
  2. 启动时从 userConfig.xml 重新加载

我根据其他答案为 ApplicationSettingsBase 创建了这个扩展

public static void Add<T>(this ApplicationSettingsBase settings, string propertyName, T val)
{
var p = new SettingsProperty(propertyName)
{
PropertyType = typeof(T),
Provider = settings.Providers["LocalFileSettingsProvider"],
SerializeAs = SettingsSerializeAs.Xml
};

p.Attributes.Add(typeof(UserScopedSettingAttribute), new UserScopedSettingAttribute());

settings.Properties.Add(p);
settings.Reload();

//finally set value with new value if none was loaded from userConfig.xml
var item = settings[propertyName];
if (item == null)
{
settings[propertyName] = val;
settings.Save();
}
}

这将使 Settings["MyKey"] 工作,但是当您重新启动设置时将不会加载,但 userConfig.xml 具有新值(如果您调用了 Settings.Save())

让它重新加载的技巧是再次执行添加,例如

if (settings.Properties.Cast<SettingsProperty>().All(s => s.Name != propertyName))
{
settings.Add("MyKey", 0);
};

Add 的工作方式是,如果没有从 userConfig.xml 加载任何值,它只会将 MyKey 设置为 0

关于c# - 在运行时创建新设置并在重启后读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com