Как получить статическое свойство, объявленное из другого экземпляра.C # - PullRequest
0 голосов
/ 27 марта 2012

Моё приложение на C # выполняется и устанавливает статическую переменную "_user".Afterwords другое приложение выполняется в том же процессе, и он должен прочитать эту переменную.Я не могу получить ожидаемые результаты.

  • Приложение 1: Установка переменной _user:

    public class Program
    {
        public static void Main(string[] args)
        {
    
            LoginDialog login = new LoginDialog();
            login.RunDialog();
        }
    }
    
  • Класс, вызываемый приложением, которое устанавливает переменную_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 ]

3 голосов
/ 27 марта 2012

Это невозможно, потому что каждый процесс имеет свое собственное адресное пространство и, следовательно, собственный экземпляр LoginDialog.User.Вам необходимо использовать какой-либо вид межпроцессного взаимодействия, например Shared Memory или Named Pipes.

Кстати: запуск одного приложения из другого не приведет к одному процессу, который выполняет оба приложения.Каждое приложение имеет свой собственный процесс.

1 голос
/ 27 марта 2012

Я подозреваю, что все, что размещает ваши приложения, создает новые AppDomain для каждого приложения. Это отделяет их друг от друга почти так же, как если бы они были в разных процессах.

Я предлагаю вам сохранить результаты на диск, а не пытаться использовать статические переменные.

1 голос
/ 27 марта 2012

Статические данные живут только до тех пор, пока домен приложения (AppDomain).Когда домен приложения выгружается, его память освобождается, а все данные, хранящиеся в этой памяти, теряются.

Если в вашем методе Main вы сначала вызываете LoginDialog.RunDialog(), вы должны получить ожидаемый результат.

Если вам действительно нужен логин для запуска в отдельном домене приложений, вам нужно сохранить некоторые данные в известном месте на диске или использовать какой-либо другой метод межпроцессное взаимодействие .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...