C# WPF中的会话?

C# WPF中的会话?,c#,wpf,session,C#,Wpf,Session,在ASP.NET中,我可以做Session[“something”]=something,然后我可以在另一个页面中检索会话的值。WPF中是否有允许我在ASP.NET中执行相同操作的会话?我注意到WPF中没有会话,因为有状态。因为我有很多用户控件页面,所以我需要获取其值并将其显示在主窗口上 WPF中是否有类似于会话的内容 一些资源说使用cookies。我该怎么做?我的是WPF应用程序而不是WPF web应用程序?如果我正确理解您的问题,您只需要为程序中的某些值提供某种全局存储 您可以为需要存储的各

在ASP.NET中,我可以做
Session[“something”]=something,然后我可以在另一个页面中检索会话的值。WPF中是否有允许我在ASP.NET中执行相同操作的会话?我注意到WPF中没有会话,因为有状态。因为我有很多用户控件页面,所以我需要获取其值并将其显示在主窗口上

WPF中是否有类似于会话的内容


一些资源说使用cookies。我该怎么做?我的是WPF应用程序而不是WPF web应用程序?

如果我正确理解您的问题,您只需要为程序中的某些值提供某种全局存储

您可以为需要存储的各种值创建一个具有公共静态属性的静态类,并能够在应用程序内部全局访问这些值。比如:

public static class Global
{
    private string s_sSomeProperty;

    static Globals ()
    {
        s_sSomeProperty = ...;
        ...
    }

    public static string SomeProperty
    {
        get
        {
            return ( s_sSomeProperty );
        }
        set
        {
            s_sSomeProperty = value;
        }
    }

    ...
}
这样,您就可以在代码中的任何地方编写
Global.SomeProperty
,只要
Global
类可用

当然,您需要进行验证,如果您的应用程序是多线程的,还需要进行适当的锁定,以确保您的全局(共享)数据跨线程受到保护


此解决方案比使用session之类的方法更好,因为您的属性将是强类型的,并且属性值没有基于字符串的查找。

一种可能是使用:

Application.Current.Resources["something"] = something;

不过我不会养成频繁使用的习惯。我认为它通常用于存储一次(例如样式)然后从应用程序中的其他点引用的数据。应用程序中的所有内容读取/写入全球共享的数据都是不好的做法,可能会使调试变得困难。

在我看来,最好的方法是将其存储在应用程序的当前属性中,如下所示:

Application.Current.Properties["stuff"]
您可以存储任何类型的对象,但不要滥用它

只有在我没有其他方式共享数据的情况下,我才会亲自使用这种技巧(与Grant Winney的建议相同)

我更喜欢使用翻译资源,或者使用其他标志/数据的图像和属性,只是为了稍微分开一些内容,请尝试以下操作:

System.Windows.Application.Current.Properties["Something"] = Something;

我在我的项目中多次使用此功能,

WPF和Winforms没有ASP应用程序中习惯的基于会话的思维方式。实际上,如果您有一个主WPF项目,我们称之为MainApplicationProject,它引用另一个项目,例如,假设AdminModuleProject无法工作:如果在AdminModuleProject中创建此类,则无法在其他ModuleProject中使用它。如果您在MainApplicationProject中创建此类,您将无法在任何模块引用的项目中使用它。@G.Dealmeida对不起,这是什么意思?我说的是循环引用