2016-06-15 11 views
6

Używam AvalonDock 2.0, a gdy kiedykolwiek otworzę kontener dok, w trybie debugowania awarię aplikacji (działa dobrze, gdy działa bez debugowania). Mam poniższy wyjątek:Nieobsługiwane "System.ComponentModel.Win32Exception" podczas korzystania z AvalonDock 2.0

nieobsługiwany wyjątek typu „System.ComponentModel.Win32Exception” wystąpił w WindowsBase.dll

Dodatkowe informacje: Operacja zakończona pomyślnie

natknąłem to answer, które sugerują, aby odznaczyć pola z Ustawienia wyjątku. Przewodową rzeczą jest to, że zadziałało za pierwszym razem. ale już go nie ma. Próbowałem na innych komputerach, które też nie działają. wszelkie sugestie, jak to naprawić.
kod Avalon (wyjątek rzucony na linii 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

To jest po prostu kośćca kodowanie ze strony projektanta biblioteki. Oni rzucają wyjątek Win32Exception z kodem błędu, który wskazuje na sukces, prawdopodobnie "ERROR_SUCCESS". Konstruktor wyjątków tłumaczy ten kod błędu na komunikat, który jest * "Operacja zakończona pomyślnie" * - tj. Nie wystąpił błąd. Złóż raport o błędzie z opiekunami biblioteki. –

+0

@CodyGray tak, to prawda, ale czy istnieje sposób, aby przestać wychwycić wyjątek ze strony aplikacji. zgodnie z odpowiedzią, którą przytoczyłem w moim pytaniu. rozwiązanie działało na początku, ale już nie jest. i nie mogłem zrozumieć dlaczego. – IBRA

+0

Opublikowany tutaj komunikat o wyjątku nie oznacza, że ​​jest to wyjątek pierwszej szansy. Jest również mało prawdopodobne, że i tak to rozwiąże problem. Wymagałoby to, aby w kodzie biblioteki znajdował się blok przechwytywania, który wychwycił wyjątek i obsłużył go. Nie jestem pewien, co zrobić, aby obsłużyć wyjątek, który wskazuje na sukces. –

Odpowiedz

3

Widocznie Jest takie issue jest złożony, ale bez odpowiedzi aż do tej chwili.

W ramach obejścia problemu obsłużyłem nieobsługiwane wyjątki, używając Application.DispatcherUnhandledException z App.xaml.cs.
Aby uzyskać więcej informacji, sprawdź to answer.
Kod:

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

Podczas uruchamiania z poziomu VS2015 w trybie debugowania lub zwolnienia w systemie Windows 10, aplikacja nie zakończy pracy po zamknięciu podczas stosowania tego rozwiązania. Trzeba kliknąć przycisk debugowania, aby w końcu zakończyć aplikację. Jakieś pomysły? – Andreas

1

dla nikogo innego lądowania na tej stronie, byłem w stanie pozbyć się problemu z następującym ustawieniu wyłączone:

Narzędzia> Opcje> debugowania> ogólne> Włącz interfejs debugowania Narzędzia do XAML

1

My quick hack jest to, że wyłączyłem UpdateWindowPos() w klasie LayoutAutoHideWindowControl podczas konfiguracji debugowania.

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()"); 
    } 

Do mojego aktualnego doświadczenia, wynika to tylko w niepełnosprawności przeciągnąć & kroplę zminimalizowanych dokowalnych pojemników.

+0

lub po prostu '#if! DEBUG' (i pomiń' # ELSE') – kmote

+0

@kmote Twoje życzenie to moje polecenie – Henk

Powiązane problemy