2010-10-13 2 views
2

У меня есть приложение, в котором у меня есть несколько форм. В этих формах у меня есть форма настроек системы. Мне нужно открыть эту форму из меню, а также создать ярлык, созданный на рабочем столе.Как предотвратить открытие формы Несколько раз

Я могу открыть форму из 2-х мест по отдельности. Но проблема в том, что он открывает два отдельных экземпляра одной и той же формы. это означает, во-первых, я нажал на меню, чтобы открыть форму. Теперь мой экземпляр формы создан и отображается на экране. Но всякий раз, когда я нажимаю на значок своего рабочего стола, он создает другой экземпляр той же формы вместо отображения той же формы. , Таким образом, это означает, что он отображает два экземпляра одной и той же формы.

Но у меня есть только одна форма. Я попытался и googled в сети также. Я не нашел никакой информации.

Может кто-нибудь, пожалуйста, помогите мне исправить эту проблему. Любое предложение будет действительно полезно для меня.

+0

Звучит так, как будто у вас работает 2 приложения, это правильно? – leppie

+0

Значок рабочего стола, о котором вы упоминаете, - это рабочий стол Windows - если это так, вы создаете совершенно новый экземпляр приложения. И вы хотите, чтобы ваше приложение было инстансировано один раз или нет? – riffnl

+0

извините за задержку. Фактически, ярлык моего рабочего стола также является exe (Source), который откроет конкретную форму в целевом exe. Если мы находимся внутри целевого exe, то мы можем использовать mutex или singleton, чтобы открыть только один экземпляр формы. Но поскольку запрос поступает из другого exe i.е. Источник exe, эта концепция мьютекса также не работает. – Dinesh

ответ

0

Я использовал semaphor концепцию для управления этим. Всякий раз, когда форма открыта, я пишу запись в реестр. Когда форма закрыта, я удаляю эту запись.

Итак, всякий раз, когда я пытаюсь открыть форму, она проверит запись в реестре. Исходя из этого, он откроет форму.

0

Вы должны реализовать какой-то механизм блокировки, чтобы только один экземпляр вашей программы. Я думаю, что ваша программа «Системные настройки» могла проверить, запущены ли на компьютере другие экземпляры при запуске программы, если это так прекратится, иначе запустите новый экземпляр.

3

Вам нужен один экземпляр. Эта конструкция уже доступна в рамках .Net. Просто зарегистрируйтесь this post от Hanselman.

Примечание: Я знаю, что пространство имен этого класса является VisualBasic. Но это не должно мешать вам использовать его в вашем приложении C#. Это просто имя пространства имен. Это не означает ничего о его функциональности. (Microsoft лучше назвала Foo. В этом случае это было бы гораздо более популярным.)

0

Похоже, вам нужна модифицированная версия шаблона проектирования Singleton. Попробуйте создать публичный статический метод внутри класса, который внутренне вызывает конструктор для формы. Затем, когда кто-то предложил использовать переменную счетчика, чтобы отслеживать, как могут быть вызваны статические методы, давая вам метрику, которую вы можете использовать для обеспечения только нужного числа, если экземпляр создан.