2016-06-15 83 views
6

Sto utilizzando AvalonDock 2.0 e ogni volta che apro un contenitore dock, mentre in modalità di debug l'arresto anomalo dell'applicazione (funziona correttamente durante l'esecuzione senza debug). Ottengo l'eccezione di seguito:"System.ComponentModel.Win32Exception" non gestito quando si utilizza AvalonDock 2.0

un'eccezione non gestita di tipo 'System.ComponentModel.Win32Exception' si è verificato in WindowsBase.dll

Ulteriori informazioni: l'operazione completata

mi sono imbattuto questo answer, che suggerisce di deselezionare le caselle da Impostazioni eccezione. La cosa cablata è che ha funzionato la prima volta che l'ha usata. ma non più. Ho provato su altre macchine che non funziona neanche. eventuali suggerimenti su come risolvere questo problema.
codice Avalon (eccezione generata alla linea 5)

protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { 
      if (msg == Win32Helper.WM_WINDOWPOSCHANGING) { 
       if (_internalHost_ContentRendered) { 
        // the below line throw the exception 
        Win32Helper.SetWindowPos(_internalHwndSource.Handle, Win32Helper.HWND_TOP, 0, 0, 0, 0, Win32Helper.SetWindowPosFlags.IgnoreMove | Win32Helper.SetWindowPosFlags.IgnoreResize); 
       } 
      } 
      return base.WndProc(hwnd, msg, wParam, lParam, ref handled); 
     } 
+0

Questa è solo la codifica con ossa nella parte del progettista della biblioteca. Lanciano una Win32Exception con un codice di errore che indica il successo, probabilmente 'ERROR_SUCCESS'. Il costruttore di eccezioni sta traducendo quel codice di errore in un messaggio, che è * "L'operazione è stata completata con successo" * - cioè, non si è verificato alcun errore. Presenta una segnalazione di bug ai manutentori della biblioteca. –

+0

@CodyGray sì, è vero, ma esiste un modo per interrompere l'intercettazione dell'eccezione dal lato dell'applicazione. come per la risposta a cui ho fatto riferimento nella mia domanda. la soluzione ha funzionato inizialmente ma non lo è più. e non riuscivo a capire perché. – IBRA

+0

Il messaggio di eccezione che hai postato qui non indica che si tratta di un'eccezione di prima scelta. È anche improbabile che ciò risolva comunque il problema. Richiederebbe che ci fosse un blocco catch da qualche parte nel codice della libreria che catturava l'eccezione e la gestiva. Non sono sicuro di cosa farai per gestire un'eccezione che indica il successo. –

risposta

3

A quanto pare c'è un issue è archiviato, ma senza risposta fino a questo momento.

Quindi come soluzione temporanea, ho gestito tutte le eccezioni non gestite utilizzando Application.DispatcherUnhandledException da App.xaml.cs.
Si prega di controllare questo answer per maggiori dettagli.
Codice:

protected override void OnStartup(StartupEventArgs e) { 
    base.OnStartup(e); 
    this.DispatcherUnhandledException += AppGlobalDispatcherUnhandledException; 
} 

private void AppGlobalDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { 
    e.Handled = true; 
} 
+0

Quando si esegue da VS2015 in modalità debug o release su Windows 10, l'applicazione non si arresterà all'arresto quando si applica questa soluzione. È necessario fare clic sul pulsante debug-stop per terminare definitivamente l'app. Qualche idea? – Andreas

1

Per chiunque altro atterraggio su questa pagina, sono stato in grado di sbarazzarsi del problema con la seguente impostazione spento:

Strumenti> Opzioni> Debugging> Generale> Abilita UI debug Strumenti per XAML

1

Il mio trucco rapido è che ho disabilitato UpdateWindowPos() nella classe LayoutAutoHideWindowControl durante la configurazione di debug.

internal void Show(LayoutAnchorControl anchor) 
    { 
     if (_model != null) 
      throw new InvalidOperationException(); 

     _anchor = anchor; 
     _model = anchor.Model as LayoutAnchorable; 
     _side = (anchor.Model.Parent.Parent as LayoutAnchorSide).Side; 
     _manager = _model.Root.Manager; 
     CreateInternalGrid(); 

     _model.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_model_PropertyChanged); 

     Visibility = System.Windows.Visibility.Visible; 
     InvalidateMeasure(); 
#if !DEBUG 
     UpdateWindowPos(); 
#endif 
     Trace.WriteLine("LayoutAutoHideWindowControl.Show()"); 
    } 

Per la mia esperienza attuale, questo si traduce solo nella disabilità per trascinare & goccia di contenitori agganciabili minimizzate.

+0

o semplicemente '#if! DEBUG' (e ometti il' # ELSE') – kmote

+0

@kmote il tuo desiderio è il mio comando – Henk