2010-10-13 17 views
2

J'ai une application dans laquelle j'ai plusieurs formes. Dans ces formulaires, j'ai un formulaire de paramètres système. Je dois ouvrir ce formulaire à partir du menu ainsi qu'un raccourci créé sur le bureau.Comment empêcher l'ouverture du formulaire plusieurs fois

Je suis capable d'ouvrir le formulaire à partir de 2 places individuellement. Mais le problème est, Il ouvre deux instance distincte de la même forme. cela signifie, d'abord, j'ai cliqué sur le menu pour ouvrir le formulaire. Maintenant, mon instance de formulaire est créé et il est affiché sur l'écran. Mais chaque fois que je clique sur l'icône de mon bureau, c'est créer une autre instance du même formulaire au lieu d'afficher le même formulaire. . Cela signifie donc qu'il affiche deux instances du même formulaire.

Mais je n'ai qu'une seule forme. J'ai essayé et googlé dans le filet aussi. Je n'ai trouvé aucune information. Quelqu'un peut-il s'il vous plaît aidez-moi à résoudre ce problème. Toute suggestion me sera vraiment utile.

+0

Il me semble que vous avez 2 applications en cours d'exécution, est-ce correct? – leppie

+0

L'icône de bureau que vous mentionnez est un bureau Windows. Dans ce cas, vous créez une nouvelle instance complète de l'application. Et vous voulez que votre application soit instanciée une fois ou non? – riffnl

+0

désolé pour le retard, En fait, mon raccourci sur le bureau est également un exe (Source), qui va ouvrir un formulaire spécifique dans la cible exe. Si nous sommes dans l'exe cible, alors nous pouvons utiliser mutex ou singleton pour ouvrir une seule instance du formulaire. Mais comme la demande vient d'un autre exe i.e. Source exe, ce concept de mutex ne fonctionne pas non plus. – Dinesh

Répondre

0

Je l'ai utilisé pour contrôler semaphor concept de cela. Chaque fois que le formulaire est ouvert, j'écris une entrée dans le registre. Une fois le formulaire fermé, je supprime cette entrée. Donc, chaque fois que j'essaie d'ouvrir le formulaire, il va vérifier l'entrée de registre. Basé sur cela, il va ouvrir le formulaire.

0

Vous devez mettre en œuvre une sorte de mécanisme de verrouillage pour permettre une seule instance de votre programme en cours. Je suppose que votre programme System Settings peut vérifier si d'autres instances sont en cours d'exécution sur l'ordinateur au démarrage du programme, si c'est le cas, sinon démarrez une nouvelle instance.

3

Vous avez besoin d'une instance unique. Cette construction est déjà disponible dans le framework .Net. Il suffit de vérifier this post de Hanselman.

note: Je sais que l'espace de noms de cette classe est VisualBasic. Mais cela ne devrait pas vous empêcher de l'utiliser dans votre application C#. C'est juste le nom d'un espace de noms. Cela ne veut rien dire de sa fonctionnalité. (Microsoft l'aurait mieux nommé Foo, dans ce cas ce serait beaucoup plus populaire.)

0

On dirait que vous avez besoin d'une version modifiée du motif de conception Singleton. Essayez d'avoir une méthode statique publique dans la classe qui appelle le constructeur en interne pour le formulaire. Puis, comme quelqu'un a suggéré d'utiliser une variable de compteur pour garder une trace de la façon dont les temps de cette méthode statique est appelée, vous pouvez ainsi utiliser une mesure que vous pouvez utiliser pour vous assurer que seul le nombre désiré est créé.

Questions connexes