Подтвердить что ты не робот

Каков самый простой способ взаимодействия между процессами в С#?

У меня есть два приложения С#, и я хочу, чтобы один из них отправил два целых числа в другое (это не должно быть быстрым, поскольку он вызывается только один раз в несколько секунд).

Какой самый простой способ сделать это? (Он не должен быть самым элегантным.)

4b9b3361

Ответ 1

Самый простой и надежный способ - это почти IpcChannel (a.k.a. Inter Process Communication Channel); что что это там для. Вы можете запустить его и запустить с помощью нескольких строк кода и конфигурации.

Ответ 2

Вы можете попробовать .NET Remoting. Вот простой пример: Удаление кода .NET.NET.

Если вы используете .NET 3.5, вы должны пойти на WCF, так как Remoting медленно устаревает. Опять же, есть много примеров для WCF вокруг.

Ответ 3

Я создал свою собственную библиотеку с открытым исходным кодом для быстрого и простого IPC, который работает между службами Windows, консольными приложениями и форматами Windows.

Он имеет некоторые преимущества перед существующими реализациями IPC и не требует какой-либо конфигурации.

Смотрите здесь.

Ответ 4

Я бы сказал, чтобы они разговаривали через сокет.

Есть одна программа listen в сокете, а вторая connect - первая. Отправьте два целых числа в одной строке, как строки цифр.

Вопрос только в том, как они должны согласовывать номера портов и как они знают, что они разговаривают друг с другом. Они могут договориться о номерах портов, решив, что они всегда должны использовать порт 12345 (скажем), а грязно-хакерское решение для второй части - просто доверять тому, с кем вы разговариваете, чтобы быть хорошим парнем.

Ответ 5

Другой способ - подражать именованному каналу. Объявите файл где-нибудь и прочитайте его/напишите ему.

Или, если программы выполняются последовательно, вы можете попробовать буфер обмена... но это решение является уродливым, как черт, и является ошибкой (иногда .NET не может получить доступ к буферу без каких-либо причин).

Ответ 6

Для полноты вы также можете использовать net.pipe и WCF.

Ответ 7

Я создал простой класс, который использует класс IpcChannel для взаимодействия между процессами. Вот ссылка на Gist на GitHub.

Код на стороне сервера:



       IpcClientServer ipcClientServer = new IpcClientServer();
       ipcClientServer.CreateServer("localhost", 9090);

       IpcClientServer.RemoteMessage.MessageReceived += IpcClientServer_MessageReceived;
    
    

Слушатель события:


    private void IpcClientServer_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        if (InvokeRequired)
        {
            Invoke(new MethodInvoker(delegate { textBox2.Text += e.Message + 
            Environment.NewLine; }));
        }
        else
        {
            textBox2.Text += e.Message + Environment.NewLine;
        }
    }


Клиент:



        if (ipcClientServer == null)
        {
            ipcClientServer = new IpcClientServer();
            ipcClientServer.CreateClient("localhost", 9090);
        }
        ipcClientServer.SendMessage(textBox1.Text);


Примечание: ссылка на System.Runtime.Remoting обязательна.