Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открыть показать повторно Mutex / 7 сообщений из 7, страница 1 из 1
29.11.2012, 19:37
    #38058838
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открыть показать повторно Mutex
Добрый день. Запускается приложение (текущее см. ниже) через другое (не мое), посредством кнопки, что запустить читается через 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
29.11.2012, 19:59
    #38058852
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открыть показать повторно Mutex
попробуй

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



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

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

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

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

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


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

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

Код: 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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открыть показать повторно Mutex / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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