使用 AvalonDock 2.0 时未处理 'System.ComponentModel.Win32Exception'
Unhandled 'System.ComponentModel.Win32Exception' when using AvalonDock 2.0
我正在使用 AvalonDock 2.0,每当我打开一个停靠容器时,在调试模式下应用程序崩溃(在 运行 没有调试的情况下它工作正常)。我得到以下异常:
An unhandled exception of type 'System.ComponentModel.Win32Exception'
occurred in WindowsBase.dll
Additional information: The operation completed successfully
我遇到了这个 answer,它建议取消选中“异常设置”中的框。有线的东西是它在第一次使用时就起作用了。但它不再存在了。我在其他机器上试过它也不起作用。关于如何解决此问题的任何建议。
Avalon代码(第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);
}
显然有一个 issue 已提交,但直到现在都没有回复。
因此,作为一种解决方法,我使用 App.xaml.cs
中的 Application.DispatcherUnhandledException 处理了所有未处理的异常。
请查看此 answer 了解更多详情。
代码:
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;
}
对于登陆此页面的其他人,我可以通过关闭以下设置来解决问题:
工具 > 选项 > 调试 > 常规 > 为 XAML
启用 UI 调试工具
我的快速技巧是在调试配置期间禁用 LayoutAutoHideWindowControl class 中的 UpdateWindowPos()。
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()");
}
根据我目前的经验,这只会导致无法拖放最小化的可停靠容器。
我正在使用 AvalonDock 2.0,每当我打开一个停靠容器时,在调试模式下应用程序崩溃(在 运行 没有调试的情况下它工作正常)。我得到以下异常:
An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in WindowsBase.dll
Additional information: The operation completed successfully
我遇到了这个 answer,它建议取消选中“异常设置”中的框。有线的东西是它在第一次使用时就起作用了。但它不再存在了。我在其他机器上试过它也不起作用。关于如何解决此问题的任何建议。
Avalon代码(第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);
}
显然有一个 issue 已提交,但直到现在都没有回复。
因此,作为一种解决方法,我使用 App.xaml.cs
中的 Application.DispatcherUnhandledException 处理了所有未处理的异常。
请查看此 answer 了解更多详情。
代码:
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;
}
对于登陆此页面的其他人,我可以通过关闭以下设置来解决问题:
工具 > 选项 > 调试 > 常规 > 为 XAML
启用 UI 调试工具我的快速技巧是在调试配置期间禁用 LayoutAutoHideWindowControl class 中的 UpdateWindowPos()。
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()");
}
根据我目前的经验,这只会导致无法拖放最小化的可停靠容器。