Ho un'applicazione WPF con un molto complessi XAMLs, ho bisogno di un modo per conoscere il punto che la mia domanda appendere, quando cerco di mettere in pausa l'esecuzione, l'applicazione sembra non essere appeso, il puntatore sarà su questa linea:Hang in luogo sconosciuto in un ambiente molto complesso applicazione WPF quando le finestre layout è cambiato a causa della creazione di ReportViewr in un altro thread
System.Windows.Application myApp;
.
.
.
.
myApp.Run(); // <== this line
questo sta accadendo quando cambio il layout della barra delle applicazioni o quando Windows Explorer si è schiantato (il compito la barra è nascosta), se faccio queste modifiche in una pesante ripetizione, l'applicazione non si riprenderà mai, ma quando si esegue una piccola modifica, l'applicazione si ripristinerà dopo alcuni minuti, ho bisogno di conoscere la causa di questo problema, dubito nel complesso XAML di la mia applicazione, ma ho bisogno di un modo per conoscere la pagina o il componente, o qualsiasi sia la fonte di questo blocco.
* EDIT *
ho bisogno di uno strumento o un modo per sapere qual è il codice XAML che consumare il tempo di dispatcher!
* EDIT *
Ho avuto l'esatto motivo del blocco, è a causa di creazione di un'istanza di ReportViewer in un altro thread, quando ho tolto la creazione dell'istanza, ha funzionato perfettamente, il cosa strana, che questo errore sia esisteva nella mia applicazione molto tempo fa, ma il blocco ha sollevato di recente, voglio dire: la mia applicazione si bloccherà quando si inserisce uno di questi codici in qualsiasi luogo della mia richiesta:
new Action(() =>
{
ReportViewer rv = new ReportViewer();
}).BeginInvoke(null, null);
OR
new Action(() =>
{
ReportViewer rv = new ReportViewer();
rv.Dispose();
}).BeginInvoke(null, null);
O
new Action(() =>
{
ReportViewer rv = new ReportViewer();
rv.LocalReport.ReleaseSandboxAppDomain();
rv.Dispose();
}).BeginInvoke(null, null);
Le mie domande:
1- Qual è la relazione tra la modifica del layout delle finestre (Ridimensionamento della barra delle applicazioni o in movimento) e il visualizzatore di report che non viene aggiunto al qualsiasi albero visivo, perché questo causa la sospensione della mia applicazione?
2- Come è possibile determinare la posizione del blocco?
3- Alcune volte l'applicazione si ripristinerà in pochi minuti (3-5), ma alcune volte il blocco rimane per ore e l'applicazione non si ripristinerà, perché?
4- In che modo è possibile determinare il componente o la configurazione che ha causato il blocco dell'applicazione in queste circostanze?
A proposito, questo è molto utile per gli altri se risolto. Abbiamo impiegato molto tempo per rilevarlo, ma non abbiamo ottenuto il motivo esatto combinato con il ReportViewer che ha causato il blocco!
Si può sempre provare una delle code profiling strumenti come formiche Red Gate (credo che fanno ancora un libero prova). Ciò ti darà almeno il punto in cui il codice impiega il tempo - potrebbe non scoprire potenziali deadlock (potrebbe essere attività a lungo termine o deadlock tra le altre cose) – Charleh
Provato per giorni, non ho avuto alcuna informazione utile! ho provato debug-diag e altri strumenti di debugging generici di Windows, ma non ho avuto il punto critico in cui la mia applicazione si blocca, sono abbastanza sicuro, che a causa di qualche XAML errato, ho bisogno di strumenti per vedere il punto in cui si trova il dispatcher in XAML. –
Si verifica su più di una macchina? – Charleh