2015-03-23 11 views
0

J'essaie d'empêcher une application Silverlight OOB de s'ouvrir deux fois, mais je ne sais pas comment. J'ai essayé de créer un FileStream direct après le lancement de l'application avec "FileShare.None", pour lancer une erreur lorsque l'App est ouverte deux fois et essaie d'ouvrir le fichier, mais c'est moche et ne fonctionne pas parce que le FileStream semble être libéré après environ 30 secondes ..Empêcher Silverlight Out-Of-Browser App de l'ouverture deux fois

FileStream s2 = new FileStream(path, FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.None); 

Une idée comment je pourrais aborder cela?

Merci, phil

Répondre

1

Une façon d'y parvenir est d'utiliser le canal de messagerie locale entre les applications Silverlight. Ce scénario est mentionné dans le MSDN, je vais développer un peu plus ici.

La classe LocalMessageReceiver vous permet de vous inscrire à un service de messagerie principalement destiné à communiquer entre différentes applications Silverlight.

L'astuce est que vous ne pouvez vous enregistrer qu'une seule fois avec le même nom dans une portée particulière. Par conséquent, si la première instance s'enregistre en utilisant le nom de votre application, toute autre instance effectuant la même chose par la suite déclenchera une exception. Ensuite, il vous suffit de prendre cette exception et traiter, en fonction de ce que vous voulez faire (fermer l'instance, afficher un message, etc.)

Voici le code que j'utilise:

private bool CheckSingleInstance() 
{ 
    try 
    { 
     var receiver = new LocalMessageReceiver("application name", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain); 
     receiver.Listen(); 
     return true; 
    } 
    catch (ListenFailedException) 
    { 
     // A listener with this name already exists 
     return false; 
    } 
} 

Une avantage de cette solution est que cela fonctionne si vos instances sont dans le navigateur ou hors du navigateur.

+0

merci beaucoup! fonctionne parfaitement :) – philipp