C# 需要在WPF中的应用程序中存在的变量

C# 需要在WPF中的应用程序中存在的变量,c#,wpf,C#,Wpf,我正在开发一个WPF应用程序。我需要一些变量/信息,在用户关闭该应用程序之前不要销毁。哪种方法最好静态使用静态变量初始化?此外,这种情况下的最佳实践是什么?在这种情况下,您可以使用带有静态字段的静态类。他从未被释放,它没有任何析构函数,也没有参与垃圾收集 如果希望普通类保持活动状态,可以使用方法GC.KeepAlive(): 在这里,KeepAlive()创建了一个对类实例的引用,以便垃圾收集认为它仍在应用程序中使用。KeepAlive()的目的是确保存在对存在被GC过早回收风险的对象的引用 引

我正在开发一个WPF应用程序。我需要一些变量/信息,在用户关闭该应用程序之前不要销毁。哪种方法最好<代码>静态使用
静态
变量初始化?此外,这种情况下的最佳实践是什么?

在这种情况下,您可以使用带有静态字段的静态
类。他从未被释放,它没有任何析构函数,也没有参与垃圾收集

如果希望普通类保持活动状态,可以使用方法
GC.KeepAlive()

在这里,
KeepAlive()
创建了一个对类实例的引用,以便垃圾收集认为它仍在应用程序中使用。
KeepAlive()
的目的是确保存在对存在被
GC
过早回收风险的对象的引用

引自:

此方法引用obj参数,使该对象从例程开始到调用此方法的执行顺序不符合垃圾收集的条件<代码>在obj必须可用的指令范围的末尾而不是开头对该方法进行编码。

KeepAlive
方法除了延长作为参数传入的对象的生存期外,不执行任何操作,也不会产生任何副作用

或者,信息可以存储在WPF应用程序设置中。特别是如果信息很重要,并且不应在系统故障或重新启动后丢失

设置大致位于此处
Project->Properties->Parameters
。设置新值的示例:

MyProject.Properties.Settings.Default.MyButtonColor = "Red";
保存操作如下所示:

MyProject.Properties.Settings.Default.Save();
也可以使用带有属性的
绑定
,指示
中的设置类别:

xmlns:properties="clr-namespace:MyProject.Properties"

<TextBlock Text="{Binding Source={x:Static properties:Settings.Default},
                          Path=MyButtonColor,
                          Mode=TwoWay}" />
xmlns:properties=“clr命名空间:MyProject.properties”
有关在WPF中使用设置的详细信息,请参阅:


我相信你能做的就是编写一个类,像ASP.net中的会话对象那样为你保存变量。你可以这样做

public static class ApplicationState
{
    private static Dictionary<string, object> _values =
               new Dictionary<string, object>();
    public static void SetValue(string key, object value)
    {
        if (_values.ContainsKey(key))
        {
            _values.Remove(key);
        }
        _values.Add(key, value);
    }
    public static T GetValue<T>(string key)
    {
        if (_values.ContainsKey(key))
        {
            return (T)_values[key];
        }
        else
        {
            return default(T);
        }
    }
}
要读取变量,请执行以下操作:

ApplicationState.SetValue("MyVariableName", "Value");
MainText.Text = ApplicationState.GetValue<string>("MyVariableName");
MainText.Text=ApplicationState.GetValue(“MyVariableName”);

这将是通过YOUR应用程序进行的所有访问,并将始终保留在内存中。

您还可以创建静态类并在xaml中引用它,如下所示:

namespace MyNamespace
{
    public static class Globals
    {
        public static double SomeVariable { get { return 1.0; } }
    }
}
<UserControl Width="{x:Static globals:Globals.SomeVariable}" />
然后从xaml访问它,如下所示:

namespace MyNamespace
{
    public static class Globals
    {
        public static double SomeVariable { get { return 1.0; } }
    }
}
<UserControl Width="{x:Static globals:Globals.SomeVariable}" />

静态类中的静态变量可能是单例类?这可能是个坏主意,尤其是在开发多线程应用程序时。