Лучший способ обеспечить взаимодействие нескольких приложений .NET друг с другом. - PullRequest
0 голосов
/ 17 октября 2019

Итак, прежде всего, извините за мой плохой английский. Возвращаясь к вопросу, у меня есть основное приложение с элементом управления вкладками, каждая вкладка содержит другой .NET EXE. Они должны отправить информацию в основное приложение. Пример: у каждого exe-файла на вкладке есть случайный сгенерированный guid каждую секунду , и главное приложение должно его перехватить и показать в виде списка или чего-то еще, пока exe "жив".

В настоящее время я использую SQLite, и каждый раз, когда запускается новый exe-файл, пишите в таблицу. Перед закрытием этого exe удалите recod из таблицы. В основном, основное приложение извлекает эту таблицу обновлений и показывает "живой" исполняемый файл и случайно сгенерированный guid (каждую секунду). Все отлично работает, проблема в том, что мне нужно отказаться от этого метода и удалить две библиотеки SQLite.

То, что я пробовал, это:

  • сокет UDP между N клиентами иОсновное приложение, но не так стабильно. И когда-нибудь какой-то exe завис. (Использование TCP будет настолько «тяжелым» для единственной цели - отправить короткую строку. Верно?)
  • Изменение текста окна другого exe-файла и получение его через processinfo, но не обновление, я получаюэто просто строка первого раза.

Итак, есть способ для этого? В местном. Мол, я не знаю .. user32 sendmessage может быть? Или этот метод слишком агрессивен для короткой строки? Учитывая, что N sub exe являются процессом "внутри" основного, нет способа получить информацию от дочернего процесса?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 17 октября 2019

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

Использование TCP даст аналогичные результаты. Вам просто придётся иметь дело с переподключением.

SendMessage / PostMessage - самый простой и понятный метод. Но это не позволит вам передать строку напрямую. Взгляните на RegisterWindowMessage, чтобы зарегистрировать собственное сообщение и SendMessage с дескриптором HWND_BROADCAST. И вам придется отправить указатель на вашу строку. Поскольку SendMessage является синхронным, с теоретической точки зрения вы должны справиться с удалением этого сообщения, но я этого не пробовал. Другой вариант - хранить строку в другом месте (реестр, файл) и отправлять только уведомление об обновлении с помощью SendMessage. И главное приложение прочитает и удалит эту запись реестра / файла.

Самостоятельно размещенный WCF с netNamedPipeBinding также должен работать. Но это было бы слишком надежное решение.

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