当我试图举办另一个进程的一个窗口,在我的过程。 为此我使用HwndHost
这样的:BuildWindowCore错误托管窗口
public class MyHandle : HwndHost
{
#region User32.dll
private static Int32 WS_VISIBLE = 0x10000000;
private static Int32 WS_CHILD = 0x40000000;
private static Int32 WS_BORDER = 0x00800000;
private static Int32 GWL_STYLE = -16;
[DllImport("user32.dll")]
private static extern int GetWindowThreadProcessId(IntPtr hWnd, IntPtr procid);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32")]
private static extern IntPtr SetParent(IntPtr hWnd, IntPtr hWndParent);
#endregion
private Action WindowCoreBuilt = null;
private IntPtr m_window = IntPtr.Zero;
public MyHandle(IntPtr window, Action windowCoreBuiltDelegate)
{
m_window = window;
WindowCoreBuilt = windowCoreBuiltDelegate;
}
protected override System.Runtime.InteropServices.HandleRef BuildWindowCore(System.Runtime.InteropServices.HandleRef hwndParent)
{
int guestStyle = SetWindowLong(m_window, GWL_STYLE, WS_CHILD | WS_BORDER | WS_VISIBLE);
SetParent(m_window, hwndParent.Handle);
HandleRef hwnd = new HandleRef(this, m_window);
InvokeHelper.InvokeDelegate(this.Dispatcher,() => WindowCoreBuilt());
return hwnd;
}
protected override void DestroyWindowCore(HandleRef hwnd)
{
}
}
它通常工作,但有时我得到这样一个例外:
System.InvalidOperationException: BuildWindowCore failed to return the hosted child window handle.
at System.Windows.Interop.HwndHost.BuildWindow(HandleRef hwndParent)
at System.Windows.Interop.HwndHost.BuildOrReparentWindow()
at System.Windows.Interop.HwndHost.OnSourceChanged(Object sender, SourceChangedEventArgs e)
at System.Windows.SourceChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.PresentationSource.UpdateSourceOfElement(DependencyObject doTarget, DependencyObject doAncestor, DependencyObject doOldParent)
at System.Windows.PresentationSource.OnVisualAncestorChanged(DependencyObject uie, AncestorChangedEventArgs e)
at System.Windows.UIElement.OnVisualAncestorChanged(Object sender, AncestorChangedEventArgs e)
堆栈跟踪则深入得多,但我不认为这是相关的。
我的问题是:
1.这是什么原因,我该如何解决?
2.如何捕获此异常以防止我的应用程序崩溃? (它发生在我没有获得一个系统线程...)