powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открыть показать повторно Mutex
7 сообщений из 7, страница 1 из 1
Открыть показать повторно Mutex
    #38058838
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Запускается приложение (текущее см. ниже) через другое (не мое), посредством кнопки, что запустить читается через ini, где указан полный путь запускаемого приложения. Запускаю свое приложение. На форме есть кнопка " Выход ", скрипт следующий: this.Visible = false . Кнопкой скрываем приложение. При нажатии на кнопку главного (запускающего) приложения, если приложение не запущено то оно запускается, а вот если запущено, то должно появиться окно, до этого скрытое. Но при повторном запуске, окно появляется и сразу скрывается. Помогите, не могу сам разобраться, что не так.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
namespace notify
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form1 frmNotify = new Form1();
            
            bool checkone;

            Mutex m = new Mutex(true, Application.ProductName, out checkone);
            //Проверка на запущенность проги
            if (checkone)
            {
                if (System.IO.File.Exists(Application.StartupPath + "\\" +
                        Application.ProductName + ".ini"))
                {
                    Application.Run(frmNotify);
                }
                else
                {
                    MessageBox.Show("Отсутствует файл настройки " + Application.ProductName + ".ini",
                                          "Ошибка запуска.",
                                         MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    Application.Exit();
                }
            }
            else
            {
                //Должно появится окно. До этого было выполнено в коде формы this.Visible = false
                frmNotify.Visible = true;
            }
        }
    }
}



Спасибо.
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058852
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй

Код: c#
1.
GC.KeepAlive(m); 



добавить последней строкой
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058862
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC
Код: c#
1.
2.
//Должно появится окно. До этого было выполнено в коде формы this.Visible = false
                frmNotify.Visible = true;

в данном случае frmNotify - это форма нового запущенного экземпляра приложения (этот экземпляр сразу завершает свою работу и уничтожается вместе с формой).

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

Воспользуйся 111111

сделай обработчик для StartupNextInstance - это будет происходить в первом экземпляре, при попытке запустить второй.


this.IsSingleInstance = true; - для объекта класса, отнаследованного от WindowsFormsApplicationBase, чтобы включить этот механизм.
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058865
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при использовании этого подхода мютех не понадобится.
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058866
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawпопробуй
.....
добавить последней строкой

kmaw спасибо, что откликнулись, но эффект тот же. До обращения на форум, делал такой эксперимент, ставил после frmNotify.Visible = true; MessageBox , окно висит пока не закроешь MessageBox . Ну не хватает мозгов и все тут!
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058868
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч Спасибо, отпишусь по результату.
...
Рейтинг: 0 / 0
Открыть показать повторно Mutex
    #38058970
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч Спасибо огромное, вот рабочий вариант, если кому понадобиться.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            
            
            if (System.IO.File.Exists(Application.StartupPath + "\\" +
                       Application.ProductName + ".ini"))
           {
               Application.EnableVisualStyles();
               Application.SetCompatibleTextRenderingDefault(false);
               SingleInstanceApplication.Application.Run(args);
           }
           else
           {
                    MessageBox.Show("Отсутствует файл настройки " + Application.ProductName + ".ini",
                                          "Ошибка запуска.",
                                         MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    Application.Exit();
           }
        }
    }



Ну и сам класс:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
class SingleInstanceApplication : WindowsFormsApplicationBase 
    {
        static SingleInstanceApplication application;

        public SingleInstanceApplication()
        {
            //Устанавливаем запуск единичного экземпляра
            this.IsSingleInstance = true;
            this.StartupNextInstance +=
                new StartupNextInstanceEventHandler(this.SinglApp_StartupNextInstance);
        }

        internal static SingleInstanceApplication Application 
        {
            get 
            {
                if( application == null ) 
                {
                    application = new SingleInstanceApplication();
                }
             return application;
            }
        }
        protected override void OnCreateMainForm()
        {
            //Запуск формы
            this.MainForm = new Form1();
        }

        protected void SinglApp_StartupNextInstance(object sender,
                         StartupNextInstanceEventArgs eventArgs)
        {
            
this.MainForm.Visible = true;
        }
    }



Еще раз спасибо Вам Яростный Меч .
Да, не оскудеет Всемирный разум Internet, благодаря людям делящимся своим разумом.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открыть показать повторно Mutex
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]