如何获取从另一个实例声明的静态属性。 C#

时间:2012-03-27 14:14:10

标签: c# variables static

执行我的C#应用​​程序并设置变量static“_user”。后面的另一个应用程序在同一个进程下执行,它必须读取该变量。我无法获得预期的结果。

  • 应用程序1:设置_user变量:

    public class Program
    {
        public static void Main(string[] args)
        {
    
            LoginDialog login = new LoginDialog();
            login.RunDialog();
        }
    }
    
  • 由Application调用的类,它设置变量_User

    public class LoginDialog 
    {
        private static string _user;
    
        public void RunDialog() 
        {
            _user = "Peter";
        }
    
        public static string User { get { return _user; } } 
    }
    
  • 应用程序2:获取声明的静态变量:

    public class Program
    {
        public static void Main(string[] args)
        {
            string s =  LoginDialog.User;
        }
    }
    

3 个答案:

答案 0 :(得分:3)

这是不可能的,因为每个进程都有自己的地址空间,因此它有自己的LoginDialog.User实例。您需要使用某种进程间通信,如共享内存或命名管道。

BTW:从另一个应用程序启动一个应用程序不会导致一个进程执行这两个应用程序。每个应用程序都有自己的流程。

答案 1 :(得分:1)

静态数据仅与application domain(AppDomain)一样长。卸载AppDomain时,会释放其内存,并且该内存中存储的所有数据都将丢失。

如果您在Main方法中首先调用LoginDialog.RunDialog(),则应获得预期结果。

如果确实需要登录才能在单独的AppDomain中运行,则需要将一些数据保存到磁盘上的已知位置,或者使用{{3的其他方法}}

答案 2 :(得分:1)

我怀疑托管您的应用程序的是为每个应用程序创建一个新的AppDomain。这使他们彼此隔离,就好像他们处于不同的过程中一样。

我建议您将结果保存到磁盘,而不是尝试使用静态变量。