2012-09-26 13 views
6

Ho scoperto alcuni flag interessanti denominati "SingleInstanceHost" per l'app silverlight, che può essere impostata in Application Manifest File. Msdn dice che "Indica se l'applicazione ha un host a istanza singola".Flag "SingleInstanceHost" per Silverlight App

Qualcuno può spiegare cosa significa questo flag?

La mia prova:

  1. Se corro la mia applicazione WP7 Silverlight su dispositivo senza questa opzione, quindi se si tenta di eseguire la seconda istanza applicazione dal menu di avvio - il sistema uccide la prima istanza e gestisce il nuovo.

  2. Se eseguo la mia app wp7 silverlight sul dispositivo CON questo flag, quindi se provo a eseguire la seconda istanza di app dal menu di avvio - il sistema uccide la prima istanza e NON esegue quella nuova.

Strano comportamento!

+0

Davvero nessuno lo sa? – Dilnara

+1

È possibile trovare una [stessa proprietà nell'SDK della piattaforma applicativa di Windows Media Center] (http://msdn.microsoft.com/en-us/library/windows/desktop/ee525779.aspx). È questo un indizio? Non lo so. :) La documentazione è molto chiara _Indica se l'applicazione ha un host di istanza singola _... MS, per favore, completa la documentazione: D – Tonio

risposta

0

Silverlight 3 ha introdotto un modo per le applicazioni di comunicare tra loro, sulla stessa pagina o istanziate su istanze di browser diverse (funziona anche con le app installate/OOB). La comunicazione viene eseguita dalle classi mittente e destinatario, che scambiano messaggi attraverso i canali denominati. Ogni ricevitore deve registrare un nome univoco per il canale o verrà generata un'eccezione.

E questo è il trucco. Ascoltare su uno specifico canale chiamato si comporta come un mutex. Afferrando l'eccezione ListenFailed si ottiene un'opzione per visualizzare il messaggio appropriato o avviare una versione diversa dell'applicazione. Tutto il lavoro è fatto nel file App.Xaml.cs:

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

Non ho capito, Come la tua risposta si è riferita al flag 'SingleInstanceHost'? Potresti per favore chiarire? – CAMOBAP

+1

È il modo di avere una singola istanza di un'app SL ma non una spiegazione del flag 'SingleInstanceHost'. – Tonio