1

我有一个问题,我们有一些非常复杂的代码抛出 Win32Exception

创建窗口句柄时出错。

查看调用堆栈,我看到堆栈的底部来自

MainForm_ShownEvent(object sender, EventArgs e)//I Had a type-o here...arguments were wrong
{
    someControl.Parent = contentPanel;//call starts here
}

堆栈的顶部来自自定义事件。事件处理程序位于 MainForm

anotherControl_RefreshEvent(object sender, PhysDocEventArgs e)
{
   Text = titleBarText;//win32 exception
}

这怎么可能?我们不能保证一旦Form.Shown被调用就会创建一个句柄吗?

更新

立即窗口告诉我this.Handle是 0。thisMainForm 对象在哪里。

堆栈跟踪(这是 19 页长,不得不删除一些)

    System.Windows.Forms.NativeWindow.CreateHandle(System.Windows.Forms.CreateParams cp)    
    System.Windows.Forms.Control.CreateHandle() 
    System.Windows.Forms.Form.CreateHandle()    
    DevExpress.XtraEditors.XtraForm.CreateHandle()  
    System.Windows.Forms.Control.RecreateHandleCore()   
    System.Windows.Forms.Form.RecreateHandleCore()  
    System.Windows.Forms.Form.OnTextChanged(System.EventArgs e) 
    System.Windows.Forms.Control.Text.set(string value) 
    System.Windows.Forms.Form.Text.set(string value)    
>   BHCS.ECC.PhysDoc.UI.Forms.MainForm.TemplateBaseControl_RefreshEvent(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl}, BHCS.ECC.PhysDoc.BL.PhysDocEventArgs e = {BHCS.ECC.PhysDoc.BL.PhysDocEventArgs}) Line 46    C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 323 C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.docNode_Resize(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl}, System.EventArgs e = {System.EventArgs}) Line 683 C#
    System.Windows.Forms.Control.OnResize(System.EventArgs e)   
    System.Windows.Forms.UserControl.OnResize(System.EventArgs e)   
    BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 140   C#
    System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
    System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
    System.Windows.Forms.Control.UpdateBounds() 
    System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
    System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
    System.Windows.Forms.Control.Width.set(int value)   
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 332 C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.docNode_Resize(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl}, System.EventArgs e = {System.EventArgs}) Line 683 C#
    System.Windows.Forms.Control.OnResize(System.EventArgs e)   
    System.Windows.Forms.UserControl.OnResize(System.EventArgs e)   
    BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 140   C#
    System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
    System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
    System.Windows.Forms.Control.UpdateBounds() 
    System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
    System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
    System.Windows.Forms.Control.Width.set(int value)   
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 332 C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
    BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.docNode_Resize(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl}, System.EventArgs e = {System.EventArgs}) Line 683 C#
    System.Windows.Forms.Control.OnResize(System.EventArgs e)   
    System.Windows.Forms.UserControl.OnResize(System.EventArgs e)   
    BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 140   C#
    System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
    System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
    System.Windows.Forms.Control.UpdateBounds() 
    System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
    System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
    System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Height)    
    System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
    System.Windows.Forms.Control.Height.set(int value)  
    BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.RefreshSize(bool setAnchorAndWidth = false) Line 109 C#
    BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.ctrl_Resize(object sender = {System.Windows.Forms.Panel}, System.EventArgs e = {System.EventArgs}) Line 442  C#
    System.Windows.Forms.Control.OnResize(System.EventArgs e)   
    System.Windows.Forms.Panel.OnResize(System.EventArgs eventargs) 
    System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
    System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
    System.Windows.Forms.Control.UpdateBounds() 
    System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    

(删除部分)

BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 332 C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.docNode_Resize(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl}, System.EventArgs e = {System.EventArgs}) Line 683 C#
System.Windows.Forms.Control.OnResize(System.EventArgs e)   
System.Windows.Forms.UserControl.OnResize(System.EventArgs e)   
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 140   C#
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Height)    
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Height.set(int value)  
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.RefreshSize(bool setAnchorAndWidth = false) Line 109 C#
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.ctrl_Resize(object sender = {System.Windows.Forms.Panel}, System.EventArgs e = {System.EventArgs}) Line 442  C#
System.Windows.Forms.Control.OnResize(System.EventArgs e)   
System.Windows.Forms.Panel.OnResize(System.EventArgs eventargs) 
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Height)    
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Height.set(int value)  
BHCS.ECC.PhysDoc.Plugins.Prompt.BL.PanelPrompt.pnlOuter_Layout(object sender = {System.Windows.Forms.Panel}, System.Windows.Forms.LayoutEventArgs e = {System.Windows.Forms.LayoutEventArgs}) Line 164  C#
System.Windows.Forms.Control.OnLayout(System.Windows.Forms.LayoutEventArgs levent = {System.Windows.Forms.LayoutEventArgs}) 
System.Windows.Forms.ScrollableControl.OnLayout(System.Windows.Forms.LayoutEventArgs levent)    
System.Windows.Forms.Control.PerformLayout(System.Windows.Forms.LayoutEventArgs args)   
System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.PerformLayout(System.Windows.Forms.Layout.IArrangedElement affectedElement, string affectedProperty)  
System.Windows.Forms.Control.OnResize(System.EventArgs e = {System.EventArgs})  
System.Windows.Forms.Panel.OnResize(System.EventArgs eventargs) 
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Width.set(int value)   
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 150   C#
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Width.set(int value)   
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 332 C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.docNode_Resize(object sender = {BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl}, System.EventArgs e = {System.EventArgs}) Line 683 C#
System.Windows.Forms.Control.OnResize(System.EventArgs e)   
System.Windows.Forms.UserControl.OnResize(System.EventArgs e)   
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 140   C#
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Height)    
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Height.set(int value)  
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.RefreshSize(bool setAnchorAndWidth = false) Line 109 C#
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.ctrl_Resize(object sender = {System.Windows.Forms.Panel}, System.EventArgs e = {System.EventArgs}) Line 442  C#
System.Windows.Forms.Control.OnResize(System.EventArgs e)   
System.Windows.Forms.Panel.OnResize(System.EventArgs eventargs) 
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Height)    
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Height.set(int value)  
BHCS.ECC.PhysDoc.Plugins.Prompt.BL.PanelPrompt.pnlOuter_Layout(object sender = {System.Windows.Forms.Panel}, System.Windows.Forms.LayoutEventArgs e = {System.Windows.Forms.LayoutEventArgs}) Line 164  C#
System.Windows.Forms.Control.OnLayout(System.Windows.Forms.LayoutEventArgs levent = {System.Windows.Forms.LayoutEventArgs}) 
System.Windows.Forms.ScrollableControl.OnLayout(System.Windows.Forms.LayoutEventArgs levent)    
System.Windows.Forms.Control.PerformLayout(System.Windows.Forms.LayoutEventArgs args)   
System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.PerformLayout(System.Windows.Forms.Layout.IArrangedElement affectedElement, string affectedProperty)  
System.Windows.Forms.Control.OnResize(System.EventArgs e = {System.EventArgs})  
System.Windows.Forms.Panel.OnResize(System.EventArgs eventargs) 
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Width.set(int value)   
BHCS.ECC.PhysDoc.UI.UserControls.PDDocumentNodeControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 150   C#
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width) 
System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) 
System.Windows.Forms.Control.Width.set(int value)   
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RefreshControls() Line 332 C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.RunCreateControlProcess(bool destroyControls = false, bool reload = false, bool createControls = false, BHCS.ECC.PhysDoc.UI.LoadingForm loading = null) Line 1020  C#
BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl.OnResize(System.EventArgs e = {System.EventArgs}) Line 1073    C#
System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) 
System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight)   
System.Windows.Forms.Control.UpdateBounds() 
System.Windows.Forms.Control.WmWindowPosChanged(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})    
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.UserControl.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 71, System.IntPtr wparam, System.IntPtr lparam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
DevExpress.Utils.Win.Hook.ControlWndHook.WindowProc(System.IntPtr hWnd, int message, System.IntPtr wParam, System.IntPtr lParam)    
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = None)  
System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.SetBounds(System.Drawing.Rectangle bounds, System.Windows.Forms.BoundsSpecified specified)    
System.Windows.Forms.Layout.DefaultLayout.xLayoutDockedControl(System.Windows.Forms.Layout.IArrangedElement element, System.Drawing.Rectangle newElementBounds, bool measureOnly, ref System.Drawing.Size preferredSize, ref System.Drawing.Rectangle remainingBounds)  
System.Windows.Forms.Layout.DefaultLayout.LayoutDockedControls(System.Windows.Forms.Layout.IArrangedElement container, bool measureOnly = false)    
System.Windows.Forms.Layout.DefaultLayout.xLayout(System.Windows.Forms.Layout.IArrangedElement container = {System.Windows.Forms.Panel}, bool measureOnly = false, out System.Drawing.Size preferredSize = {Width = -7103 Height = -7105})  
System.Windows.Forms.Layout.DefaultLayout.LayoutCore(System.Windows.Forms.Layout.IArrangedElement container, System.Windows.Forms.LayoutEventArgs args) 
System.Windows.Forms.Layout.LayoutEngine.Layout(object container, System.Windows.Forms.LayoutEventArgs layoutEventArgs) 
System.Windows.Forms.Control.OnLayout(System.Windows.Forms.LayoutEventArgs levent)  
System.Windows.Forms.ScrollableControl.OnLayout(System.Windows.Forms.LayoutEventArgs levent)    
System.Windows.Forms.Control.PerformLayout(System.Windows.Forms.LayoutEventArgs args)   
System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.PerformLayout(System.Windows.Forms.Layout.IArrangedElement affectedElement, string affectedProperty)  
System.Windows.Forms.Control.ControlCollection.Add(System.Windows.Forms.Control value = {BHCS.ECC.PhysDoc.UI.UserControls.TemplateBaseControl}) 
System.Windows.Forms.Control.ParentInternal.set(System.Windows.Forms.Control value) 
System.Windows.Forms.Control.Parent.set(System.Windows.Forms.Control value) 
BHCS.ECC.PhysDoc.UI.Forms.MainForm.MainForm_Shown(object sender = {BHCS.ECC.PhysDoc.UI.Forms.MainForm}, System.EventArgs e = {System.EventArgs}) Line 88    C#
System.Windows.Forms.Form.OnShown(System.EventArgs e)   
System.Windows.Forms.Form.CallShownEvent()  
System.Windows.Forms.Control.InvokeMarshaledCallbackDo(System.Windows.Forms.Control.ThreadMethodEntry tme)  
System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(object obj)  
System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)    
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)    
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)  
System.Windows.Forms.Control.InvokeMarshaledCallback(System.Windows.Forms.Control.ThreadMethodEntry tme)    
System.Windows.Forms.Control.InvokeMarshaledCallbacks() 
System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.ScrollableControl.WndProc(ref System.Windows.Forms.Message m)  
System.Windows.Forms.ContainerControl.WndProc(ref System.Windows.Forms.Message m)   
System.Windows.Forms.Form.WndProc(ref System.Windows.Forms.Message m)   
DevExpress.XtraEditors.XtraForm.WndProc(ref System.Windows.Forms.Message msg)   
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m)  
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m)    
System.Windows.Forms.NativeWindow.Callback(System.IntPtr hWnd, int msg = 49734, System.IntPtr wparam, System.IntPtr lparam) 
[Appdomain Transition]  
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) Line 2281    Unknown
System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame) Line 368  Unknown
System.Windows.Threading.Dispatcher.Run() Line 327  Unknown
System.Windows.Application.RunDispatcher(object ignore) Line 2745   C#
System.Windows.Application.RunInternal(System.Windows.Window window) Line 1841  C#
System.Windows.Application.Run(System.Windows.Window window) Line 261   C#
Eclipsys.Infrastructure.UIShell.App.Main()  
4

1 回答 1

2

这是一个易于诊断且非常常见的异常。使用任务管理器的进程选项卡开始诊断。查看 + 选择列,勾选用户对象。当您使用它时,请同时勾选 GDI 对象和句柄。运行程序并在使用程序功能时观察进程的 USER Objects 值。

如果您看到的值稳步攀升,那么您的程序正在泄漏窗口句柄。一旦该值达到 10000,Windows 将停止为其提供更多窗口,该进程已消耗其配额。引发的异常是“创建窗口句柄时出错”。

原因是 Winforms 中一个非常常见的编程错误。当您使用 Controls.Remove/At() 或 Controls.Clear() 从其父级移除控件但忘记对这些移除的控件调用 Dispose() 方法时,就会发生这种情况。这将使他们永远活着,由他们的窗把手保持活力。

于 2012-10-30T15:49:41.320 回答