совместное использование переменных между запущенными приложениями в C # - PullRequest
4 голосов
/ 21 марта 2012

Я занимаюсь разработкой в ​​C # двух простых приложений, работающих на одной локальной машине без требований к сети.

Первое приложение инициализирует DLL (Class1) и устанавливает переменную. Второе приложение просто читает это данные, которые были ранее сохранены. Оба приложения создают один и тот же Class1.

Код:

  • DLL (Class1):

    public class Class1
    {
    
    private string variableName;
    
    public string MyProperty
     {
        get { return variableName; }
        set { variableName = value; }
      }
    
    }
    
  • Приложение A:

    class Program
    {
    static void Main(string[] args)
    {
        Class1 class1 = new Class1();
    
        string localReadVariable = Console.ReadLine();
    
        class1.MyProperty = localReadVariable;
    
       }
    }
    
  • Приложение B:

    class Program
    {
        static void Main(string[] args)
    {
        ClassLibraryA.Class1 localClass = new ClassLibraryA.Class1();
    
        string z = localClass.MyProperty;
    
        Console.WriteLine(z);
    }
    }
    

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

Приложение B должно прочитать «variableName», установленное приложением B

Спасибо

Ответы [ 4 ]

4 голосов
/ 21 марта 2012

Вам нужен какой-то механизм для взаимодействия между приложениями.

Это может быть через реестр, файлы, файлы с отображением в памяти и т.д ...

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

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

Я успешно использовал два метода:

  1. Используйте таблицу базы данных для хранения ваших общих данных.Если вы включаете вызовы в транзакции, вы также защищаете от проблем параллелизма.

  2. Используйте PersistentDictionary для хранения данных, защищенных мьютексом .У вас должна быть некоторая межпроцессная блокировка, поскольку PersistentDictionary может быть открыт только одним процессом за раз.

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

У приложения B нет простого способа чтения данных, созданных в приложении A. Каждое приложение имеет свое собственное адресное пространство и, следовательно, не знает о существовании других.

Но есть способы сделать это!

См. этот вопрос для одного метода ..

0 голосов
/ 21 марта 2012

Вы можете использовать .net Remoting для связи между двумя приложениями.
Удаленное взаимодействие также не требует сетевого адреса для связи.

...