WPF - показать приложение скрытое, но активное в диспетчере задач - PullRequest
0 голосов
/ 04 июля 2011

Я хотел бы установить постоянное состояние для своего приложения.Позволь мне объяснить.Время запуска довольно велико (в основном из-за большого количества запросов базы данных к удаленному серверу, что занимает 5-10 секунд и даже больше, поскольку у моих пользователей обычно слишком много запущенных приложений ...), и я бы хотел настроитьспособ скрывать и показывать мое приложение, когда это необходимо.

То, что я делаю сейчас, - это уменьшение приложения до трея только тогда, когда пользователь нажимает на красный крестик.(Приложение действительно завершается только тогда, когда пользователь выбирает Файл -> Выход).

Все пользователи запускают установщик, который проверяет установленную версию, затем версию, доступную в Интернете, и обновляют приложение, если необходимо, перед его запуском..

Теперь я бы хотел, чтобы он сначала проверил монитор процесса (который находится в диспетчере задач на вкладке "Процессы"), и если процесс уже запущен для приложения, он просто покажетснова окноВ противном случае, если ни один процесс не запущен, мы можем обработать классические шаги проверки-обновления-запуска.Это, в частности, удалит много глупых запросов клиентов, которые я регулярно получаю («эй, ваше приложение загружается слишком долго, поэтому я щелкнул по нему снова 5 раз, и оно запустило 6 экземпляров !!!!»: /) и, следовательно, спасло менямного бесполезного времени, затрачиваемого на то, чтобы попросить их прекратить запуск 50 экземпляров одного и того же приложения, потому что оно не будет работать быстрее ...

Поэтому мой главный вопрос: как выполнить такой трюк в C # /WPF?На данный момент мой процесс минимизации довольно прост (хотя, может быть, слишком прост): я просто скрываю окно и запись на панели задач.Теперь я не знаю, как показать его обратно из моего установщика

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 04 июля 2011

Запросы ваших клиентов никогда не могут быть глупыми - они платят вам деньги.

Чтобы вывести окно на передний план - создайте общесистемный мьютекс и проверьте его наличие при запуске приложения.Если он есть - используйте механизмы межпроцессного взаимодействия, чтобы отправить сообщение этому другому экземпляру, чтобы вывести его главное окно на передний план (сообщение окна или именованный канал - оба в порядке).Вот пример (обязательно проверьте соответствующие ответы).

И в любом случае покажите заставку , как только сможете предотвратить повторный запуск приложения, иснова.Если он не появляется через 1-2 секунды (2 слишком долго), это плохо.Отзывчивость вашего приложения создает ощущение, что оно работает быстрее.

2 голосов
/ 04 июля 2011

Это то, что вы ищете?

foreach (var p in Process.GetProcesses()) 
{
    if (p.ProcessName.Contains("myProcess"))
    {
        //process is already running
    }
}

Или с LINQ:

if (Process.GetProcesses().Where(p => p.ProcessName.Contains("myProcess")).Any())
{
    //process is already running
}

Если пользователи жалуются на время запуска, возможно, стоит проверить версиюна выходе, вместо запуска.

1 голос
/ 04 июля 2011

Я вчера ответил на очень похожий вопрос. Единственный недостающий бит - как скрыть и показать окно: используйте Window.Visibility, установите его на Visibility.Hidden, чтобы скрыть окно и Visibility.Visible чтобы показать это снова.

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