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

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

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

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

0
Maric Slorat 26 Мар 2014 в 03:09
Вы должны использовать именованные каналы.
 – 
User 12345678
26 Мар 2014 в 03:12

2 ответа

Лучший ответ

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

Именованные каналы - другое.

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

0
Nicholas Carey 26 Мар 2014 в 03:30
ММФ работает, спасибо. Хотя код из MS всегда создает исключение FilNoFoundException, я использовал: shujaat.net/2010/12/interprocess-messaging-using-memory.html
 – 
Maric Slorat
29 Мар 2014 в 14:08

Я думаю, что эта ветка в SO поможет вам решить вашу проблему. Удачи!

Поведение статических членов с несколькими экземплярами приложения - C #

0
Community 23 Май 2017 в 15:11