2013-02-20 52 views
0

當我關閉文檔時,我看到有如此奇怪的行爲,DockPanelSuite。當我單擊文檔右上角的關閉'X'時,頂部文檔按預期方式關閉(calls FormClosing event and Dispose() method of my derived DockContent class),但文檔中仍有一個小選項卡。它就像DockContent認識到內容應該被丟棄並且拋棄所有的內部控件並且Form.Text從標籤中消失,剩下的是一個沒有任何文本的小標籤。關閉DockContent文檔後出現DisposedObjectException

進一步嘗試再次關閉選項卡或點擊選項卡導致'ObjectDisposedException'.

這裏是我的環境規格:

Visual Studio 2008 
DockPanelSuite AssemblyVersion("2.5.0.*") 
Windows 7 x64 

下面是一個堆棧跟蹤。步入代碼,我可以看到它彈了當它試圖獲得IDragSource.DragControl這是我佈置完畢控制的實例提前幫助

(control being a derived DockContent class): 

at System.Windows.Forms.Control.CreateHandle() 
at System.Windows.Forms.Form.CreateHandle() 
at System.Windows.Forms.Control.get_Handle() 
at WeifenLuo.WinFormsUI.Docking.DockPanel.DragHandlerBase.BeginDrag() in C:\Users\nick\Documents\Visual Studio 2008\Projects\DockPanel\WinFormsUI\Docking\DockPanel.DragHandler.cs:line 48 
at WeifenLuo.WinFormsUI.Docking.DockPanel.DockDragHandler.BeginDrag(IDockDragSource dragSource) in C:\Users\nick\Documents\Visual Studio 2008\Projects\DockPanel\WinFormsUI\Docking\DockPanel.DockDragHandler.cs:line 699 
at WeifenLuo.WinFormsUI.Docking.DockPanel.BeginDrag(IDockDragSource dragSource) in C:\Users\nick\Documents\Visual Studio 2008\Projects\DockPanel\WinFormsUI\Docking\DockPanel.DockDragHandler.cs:line 811 
at WeifenLuo.WinFormsUI.Docking.DockPaneStripBase.OnMouseDown(MouseEventArgs e) in C:\Users\nick\Documents\Visual Studio 2008\Projects\DockPanel\WinFormsUI\Docking\DockPaneStripBase.cs:line 195 
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at WeifenLuo.WinFormsUI.Docking.DockPaneStripBase.WndProc(Message& m) in C:\Users\nick\Documents\Visual Studio 2008\Projects\DockPanel\WinFormsUI\Docking\DockPaneStripBase.cs:line 246 
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
at System.Windows.Forms.Application.Run(Form mainForm) 
at MosaicMaker.Program.Main() in C:\Users\nick\Documents\Visual Studio 2008\Projects\MosaicMaker\MosaicMaker\Program.cs:line 18 
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ThreadHelper.ThreadStart() 

感謝。

除了這個小小的打嗝,我對圖書館非常滿意。

+1

如果可能,請使用http://dockpanelsuite.com的最新版本。此外,圖片可以更好地解釋「什麼是」,但文檔中仍然有一個小標籤。「除非您透露更多有關該問題的信息,否則根據您輸入的內容進行診斷相當困難。 – 2013-03-04 09:16:10

+0

既然你已經回答了你自己的問題,請接受它並將此問題標記爲已回答。 – 2013-05-01 02:43:51

回答

0

嗯,我發現我的代碼是問題的根源。當DockContent窗體上的控件在其Dispose()方法中引發異常時,會發生此問題。該控件沒有正確處理,並由於某種原因DockContent控件無法正確關閉。

+0

拋出的異常中斷關閉過程。這應該是預料之中的,因爲處置模式應該不會預測到將拋出的異常。 – roken 2013-03-10 19:17:18

+0

如果您知道FxCop和Mono Gendarme,那麼您應該瞭解可以發現此類違規的規則,http://msdn.microsoft.com/zh-cn/library/bb386039.aspx – 2013-03-21 07:54:31