Оригинал инструкции здесь.
0. Создаём новый WPF-проект, называем его, к примеру, «SingleInstanceApp».
1. Добавляем в проект необходимую сборку (Reference):
▶ ▶ ▶
▶
2. Добавляем в проект класс SingleInstance:
▶ ▶ ▶ ▶
Этот класс позволяет провести проверку и убедиться, что только один экземпляр программы запущен в данный момент времени.
3. В дереве Solution Explorer открываем файл App.xaml.cs.
4. В самое начало файла добавляем строку
using Microsoft.Shell;
5. Прописываем для класса App необходимый интерфейс (просто добавляем ISingleInstanceApp), чтобы получилось так:
public partial class App : Application, ISingleInstanceApp
6. Теперь нужно изменить «Стартовый объект»
▶ ▶ ▶ ▶ ▶ :
7. Создаём уникальную строку
Для этого я использовал утилиту из PowerShell guid.
8. Присваиваем строку из п.7. переменной Unique, т.о. полный код файла App.xaml.cs становится такой:
using Microsoft.Shell;
using System;
using System.Collections.Generic;
using System.Windows;
namespace SingleInstanceApp
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application, ISingleInstanceApp
{
// TODO: Make this unique!
private const string Unique = "9d14cbf3-dfaa-450c-a6fe-ac9f797bac6c";
[STAThread]
public static void Main()
{
if (SingleInstance.InitializeAsFirstInstance(Unique))
{
var application = new App();
application.InitializeComponent();
application.Run();
// Allow single instance code to perform cleanup operations
SingleInstance.Cleanup();
}
}
#region ISingleInstanceApp Members
public bool SignalExternalCommandLineArgs(IList<string> args)
{
// Handle command line arguments of second instance
// ...
// Bring window to foreground
if (this.MainWindow.WindowState == WindowState.Minimized)
{
this.MainWindow.WindowState = WindowState.Normal;
}
App.Current.MainWindow.Show();
this.MainWindow.Activate();
return true;
}
#endregion
}
}
Окончательный вариант кода, восстанавливает свёрнутое окно (метод SignalExternalCommandLineArgs)
9. В Solution Explorer на файле App.xaml открываем Properties и выставляем Build Action = Page.
10. Нажимаем ▶
Если попытаться запустить другой экземпляр программы, то будет открыт тот, что уже запущен. Если он был свёрнут, то окно будет восстановлено.
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024