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