Передать параметры в ранее запущенный экземпляр программы - PullRequest
3 голосов
/ 15 октября 2011

Мне нужно написать программу, которой в качестве параметра будет задан некоторый путь, и воспроизвести аудиофайл, расположенный по этому пути. Но после того, как я вызываю эту программу во второй раз - мне нужен первый, чтобы закончить воспроизведение файла, а после этого - второй файл воспроизведения, который был передан в качестве параметра во второй экземпляр. Как передать второй параметр как очередь в первый экземпляр программы, если это возможно ..?

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

Полагаю, вы описываете следующую стратегию: -

  1. Экземпляр A вашего приложения открыт и воспроизводит трек X.
  2. пользователь дважды щелкает трек Y в проводнике
  3. windows запускает экземпляр B вашего приложения, передавая имя файла в качестве параметра
  4. экземпляр B обнаруживает экземпляр A
  5. экземпляр B отправляет сообщение экземпляру A для воспроизведения дорожки Y
  6. экземпляр B выключается
  7. экземпляр A получает сообщение, останавливает воспроизведение дорожки X и начинает воспроизведение дорожки Y

Очевидно, именно так работает медиаплеер VLC. Если вы попробуете описанное выше, вы увидите, что новый процесс VLC появится на короткое время, прежде чем ваш текущий экземпляр начнет воспроизведение новой дорожки.

Этот вид очень простого межпроцессного взаимодействия может быть достигнут с использованием чего-то вроде System.Threading.Mutex . Например. Вы можете использовать один мьютекс, чтобы указать на существование запущенного экземпляра, а другой - для передачи имени новой дорожки текущему экземпляру.

На самом деле эта статья описывает нечто очень похожее.

1 голос
/ 15 октября 2011

Я не думаю, что вам нужен второй экземпляр программы для этой цели.Вы можете просто попросить первую программу воспроизвести новый аудиофайл после завершения воспроизведения первой.Это можно сделать несколькими способами.

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

  • Аналогично вы можете использовать сокеты для связи

  • Третий способ можетбыть использовать очереди сообщений Windows.Аудиоплеер будет постоянно объединять очереди для новых путей.Вторая программа отправит новый путь к файлу, добавив сообщение в очередь сообщений Windows

  • Вы также можете использовать файлы для связи.Аудиоплеер может искать изменения в файле, а другая программа может записывать пути к этому файлу

...