Простая связь между 2 экземплярами применения
-
13-10-2019 - |
Вопрос
У меня есть приложение WPF, которое может взять несколько дополнительных аргументов командной строки.
Это приложение также представляет собой приложение для одного экземпляра (используя мутекс для закрытия любых экземпляров, если кто -то уже открыт).
Что я хочу сделать, хотя, если что -то пытается открыть приложение с помощью некоторых аргументов CMD -строки, что приложение будет делать то, что оно должно делать с этим (в моем приложении он открывает различные диалоги на основе линии CMD).
Какой самый простой способ достичь этого?
В коде PSEDO здесь я ищу
protected override void OnStartup(StartupEventArgs e)
{
bool mutexIsNew;
using (System.Threading.Mutex m =
new System.Threading.Mutex(true, "MyApplication", out mutexIsNew))
{
//if this is not the first instance of the app
if (!mutexIsNew)
{
//if there is some cmd line args
if (e.Args.Length > 0)
{
//send the args to the older instance so it can handle them
SendToOtherInstance(e.Args);
//shutdown this new instance
Application.Current.Shutdown();
}
}
}
base.OnStartup(e);
}
Решение
Существует множество реализаций приложений для одного экземпляра на кодовом проекте, на самом деле есть так много из них, что трудно решить, какой из них вы хотите ...
Я попробовал несколько решений, и мне очень нравится Вот этот. Анкет Это позволяет очень легко перехватить параметры командной строки, передаваемые второму экземпляру.
Другие советы
Почему бы вам просто не отправить сообщение Windows в диапазоне WM_USER. Вам нужно немного сделать информацию о информации, но вы можете сделать это с Globalalloc, Globallock и т. Д. Довольно легко.
Вы можете рассмотреть вопрос об обращении с логикой, т.е. Закройте уже запущенный экземпляр и повторно запускайте свои новые параметры.
Если вы используете .NET 4, вы можете рассмотреть карту памяти файлов для межпроцессной связи. Второй экземпляр может написать некоторые данные в общую память, установить систему Mutex для уведомления исходного экземпляра, а затем выключить. Посмотри это Обзор отображенных файлов памяти.
Или еще проще, напишите аргументы командной строки в простом текстовом файле в папке, которая всегда контролируется исходным экземпляром. Оригинальные экземпляры видят новый файл, обрабатывает его, затем удаляет его. Этот подход работает с любой версией .NET и будет легче тестировать/отлаживать.