Пытаюсь адаптировать виндовое C# WinForm приложение для работы в Linux. В Linux установлено Mono, т.е. запускаю прогу с его помощью. Для контроля за одним экземпляром приложения использовал такой класс:
public class SingleInstance :
WindowsFormsApplicationBase
{
public static SingleInstance app;
private SingleInstance()
{
this.IsSingleInstance = true;
}
public static void Run(Form_Log f,
StartupNextInstanceEventHandler startupHandler)
{
app = new SingleInstance();
app.MainForm = f;
app.MainForm.Deactivate += MainForm_Deactivate;
app.StartupNextInstance += startupHandler;
app.Run(Environment.GetCommandLineArgs());
}
}
Но в Linux все равно запускается несколько копий приложения.
Как правильно организовать работу приложения в единственном экземпляре?
UPD
Тут возник еще вопрос. Возможно, мой код работает корректно, но я как-то неверно запускаю свое приложение. Сейчас запуск примерно такой: mono MyApp.exe
(в терминале). Может есть какой другой более правильный способ запуска?
Пример простой блокировки на файлах:
using System;
using System.IO;
namespace EmptyConsole
{
class MainClass
{
private static FileStream _lockFile;
public static void Main(string[] args)
{
if (!TryOpenLockFile(out _lockFile)) {
Console.WriteLine("Приложение уже запущено");
Console.ReadKey();
return;
}
using (_lockFile) {
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
static bool TryOpenLockFile(out FileStream fileStream)
{
var fileName = Path.GetTempPath() + "MySuperApplication.lock";
try {
fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
fileStream.Lock(0, 0);
}
catch (IOException) {
fileStream = null;
return false;
}
return true;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как обратиться к уже запущенному на компьютере процессу, прочитать линию или подать новую командуДопустим на компьютере запущен Process
Проблема заключается в следующем: Есть код (ниже показан), который выгружает данные из DataGridView2 в Excel, но в момент создания Excel файла (xlexcel = new MicrosoftOffice
При триангуляции поверхности с данными координатами дырки TriangleNet некоректно триангулирует область