легко обмениваться / получать доступ к одной переменной (строке) между двумя локальными запущенными процессами

2 локальных и запущенных приложения: Приложение №1 периодически (timer1 @30sec) записывает «ping» в общую/межпроцессную строку. Приложение № 2 периодически проверяет (timer2 @ 60sec), если общая строка == «ping», и перезаписывает ее на «pong». Поскольку timer2 > timer1, приложение № 2 всегда будет получать/считывать строку как «ping». Если нет, то я могу, конечно, предположить, что приложение № 1 разбилось / зависло, и перезапустите его.

Я знаю, что это можно сделать очень легко с буфером обмена...

Clipboard.Clear();
Clipboard.SetData("checkthis", "ping");
.
.
.
object clip = Clipboard.GetData("checkthis")
if (clip.ToString() == "ping")
{
    Clipboard.Clear();
    Clipboard.SetData("checkthis", "pong");
}

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


person Maric Slorat    schedule 25.03.2014    source источник
comment
Вы должны использовать именованные каналы.   -  person User 12345678    schedule 26.03.2014


Ответы (2)


Файлы с отображением памяти — это один из подходов: http://msdn.microsoft.com/en-us/library/vstudio/dd997372(v=vs.100).aspx выполнит эту работу.

Именованные каналы — еще один.

Обычный файл тоже работает. Просто пусть каждый процесс ставит FileSystemWatcher в файл и слушает изменения.

person Nicholas Carey    schedule 25.03.2014
comment
ММФ работает, спасибо. Хотя код из MS всегда создает исключение FilNoFoundException, я использовал: shujaat.net/2010/12/interprocess-messaging-using-memory.html - person Maric Slorat; 29.03.2014