2012-09-26 4 views
6

Ich fand einige interessante Flagge namens "SingleInstanceHost" für Silverlight App, die in Application Manifest-Datei gesetzt werden kann. Msdn sagt, dass es "angibt, ob die Anwendung einen einzelnen Instanzhost hat"."SingleInstanceHost" Flag für Silverlight App

Kann mir jemand erklären, was diese Flagge bedeutet?

Mein Test:

  1. Wenn ich meine wp7 Silverlight-Anwendung auf dem Gerät ohne diese Flagge laufe, dann, wenn ich versuche, die zweite App-Instanz aus dem Startmenü zu laufen - das System tötet die erste Instanz und führt die ein neues.

  2. Wenn ich meine WP7 Silverlight App auf Gerät mit diesem Flag ausführen, wenn ich versuche, die zweite App-Instanz aus dem Startmenü zu starten - das System tötet die 1. Instanz und führt NICHT die neue.

Seltsames Verhalten!

+0

Wirklich niemand weiß? – Dilnara

+1

Sie finden [dieselbe Eigenschaft in Windows Media Center-Anwendungsplattform-SDK] (http://msdn.microsoft.com/en-us/library/windows/desktop/ee525779.aspx). Ist das ein Hinweis? Ich weiß es nicht. :) Die Dokumentation ist sehr hell _Zeigt an, ob die Anwendung einen einzelnen Instanz-Host hat _... MS, bitte, vervollständigen Sie die Dokumentation: D – Tonio

Antwort

0

Silverlight 3 führte eine Möglichkeit für Anwendungen ein, miteinander zu kommunizieren, entweder auf derselben Seite oder instanziiert in einem anderen Browser Instanzen (funktioniert sogar mit installierten/OOB-Anwendungen). Die Kommunikation wird von Sender- und Empfängerklassen durchgeführt, die Nachrichten über benannte Kanäle austauschen. Jeder Empfänger muss einen eindeutigen Namen für den Kanal registrieren oder eine Ausnahme wird ausgelöst.

Und das ist der Trick. Das Hören auf einem bestimmten benannten Kanal verhält sich wie ein Mutex. Wenn Sie die ListenFailed-Ausnahme abfangen, erhalten Sie eine Option zum Anzeigen der entsprechenden Nachricht oder zum Starten einer anderen Version der Anwendung. Die ganze Arbeit wird in der Datei App.Xaml.cs getan:

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
try 
{ 
    receiver = new LocalMessageReceiver("singleinstance"); 
    receiver.Listen(); 
    this.RootVisual = new MainPage(); 
} 
catch (ListenFailedException) 
{ 
    this.RootVisual = new DuplicateInstancePage(); 
} 
} 
+1

Ich habe nicht verstanden, Wie Ihre Antwort im Zusammenhang mit 'SingleInstanceHost' Flag? Kannst du das bitte klären? – CAMOBAP

+1

Es ist die Möglichkeit, eine einzelne Instanz einer SL-App zu haben, aber keine Erklärung für das 'SingleInstanceHost'-Flag. – Tonio