2015-03-03 9 views
5

Aggiornamento: Sembra che il problema venga introdotto con .NET 4.5.2. Il problema non si verifica con 4.5.1 o 4.5.WPF NotifyIcon Crash On First Run - La radice di Visual di un VisualTarget non può avere un genitore

Ho uno strano problema che ho difficoltà nel debug. Abbiamo un'applicazione WPF costruita sopra al NotifyIcon di Philipp Sumi. http://www.codeproject.com/Articles/36468/WPF-NotifyIcon http://www.hardcodet.net/wpf-notifyicon

Stiamo usando il verion da Nugget:

<package id="Hardcodet.NotifyIcon.Wpf" version="1.0.5" targetFramework="net45" /> 

Il problema è che per la prima volta (e solo la prima volta), l'applicazione è correva, non riesce con la seguente eccezione. È facile da ricreare passando il mouse sull'icona del vassoio di sistema quando appare. Nelle corse successive non ci sono problemi. L'applicazione non ha nessuno stato salvato o dati persistenti. Non sono a conoscenza di alcuna differenza tra la prima e le successive. Tuttavia, la seconda volta inizia molto più velocemente. Lo stesso problema si verifica nell'applicazione di esempio senza finestre fornita con NotifyIcon.

Exception Message and Stack Trace

+0

Poiché si dispone del codice sorgente di questo componente, è possibile provare a risolvere il problema da soli. Basta avviare una sessione di debug e rilevare l'eccezione nel debugger. Ispezionare gli oggetti pertinenti. Forse c'è un bug nel componente, quindi potresti postarlo all'autore o proporre una soluzione. – dymanoid

+0

@dymanoid Ci stavo lavorando.Il problema si verifica quando si imposta la proprietà ToolTip.IsOpen su true. La proprietà genera una ArgumentException. Non ho trovato nulla di sbagliato nel codice sorgente del componente. – denver

+0

"se (_notificationWindow.Visibility == Visibility.Visible) return;" risolto questo problema per me. Sto mostrando la finestra che è figlia dell'icona di notifica (_notificationWindow) subito dopo. – CRice

risposta

0

non sono stato in grado di identificare quale sia la vera causa del problema è. Sembra che siano state apportate modifiche nella versione 4.5.2 del framework. Ho trovato il seguente lavoro in giro.

All'inizio dell'applicazione è sufficiente creare un suggerimento e visualizzarlo. Questo sembra far sì che le cose vengano costruite correttamente. Ad esempio:

[STAThread] 
static void Main() 
{ 
    ToolTip tt = new ToolTip(); 
    tt.IsOpen = true; 
    tt.IsOpen = false; 
... 
} 

Vorrei ancora sapere qual è il vero problema, quindi se qualcuno lo sa, per favore posta.

+0

Avete mai capito questo? – Boumbles

+0

@Boumbles Nope. Abbiamo rilasciato l'applicazione con questo lavoro in giro. Per quanto ne so non ci sono stati problemi. – denver

0

Ho lo stesso problema. Purtroppo non sono in grado di riprodurre questo comportamento, ma ho un altro programma che utilizza questa libreria, che funziona bene. Quindi la differenza principale è che il programma di lavoro non sta solo utilizzando la proprietà ToolTipText nella parte XAML, ma fornisce anche un UIElement per la proprietà TrayToolTip.

<hc:TaskbarIcon.TrayToolTip> 
    <CustomUIElement/> 
</hc:TaskbarIcon.TrayToolTip> 

Quindi, potrebbe essere una soluzione alternativa.

(Ci scusiamo per tutti i commenti annullati, appena capito che i blocchi di codice non sono supportate nei commenti)

0

La mia soluzione era quella di rimuovere l'icona a null. La rimozione di questo ha risolto lo stesso problema descritto nella domanda. Anche se la riga era in Window_Closing l'app crached all'avvio.

internal System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon(); 
.... 
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    ni.Icon = Null; 
} 

Ora nascondere l'icona sul Window_Closing utilizzando: (In caso contrario, l'icona rimane nella zona nitification)

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    ni.Visible = false; 
} 

BTW: Utilizzando il "ToolTip-soluzione", ha aggiunto più il tempo di avvio 10 sek a la mia app.

Problemi correlati