2013-02-20 5 views
0

Я вижу такое странное поведение с DockPanelSuite, когда я закрываю свои документы. Когда я нажимаю закрыть 'X' в верхнем правом углу документов, верхний документ закрывается, как ожидалось, (calls FormClosing event and Dispose() method of my derived DockContent class), но небольшая вкладка остается из документа. Это похоже на то, что DockContent понимает, что содержимое должно быть отброшено, а все внутренние элементы управления блокированы, а Form.Text - на вкладке, а остальная часть - крошечная вкладка без текста.DisposedObjectException после закрытия документа DockContent

Дальнейшие попытки закрыть вкладку снова или нажмите на результат в закладке 'ObjectDisposedException'.

Вот мое окружение спецификации:

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

Ниже StackTrace. Вхождение в коду я могу видеть это бомбой, когда он пытается получить 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. Кроме того, изображение может лучше объяснить, что такое «но небольшая вкладка остается из документа». Если вы не раскрываете больше информации о проблеме, ее довольно сложно диагностировать на основе того, что вы набрали. –

+0

Поскольку вы ответили на свой вопрос, пожалуйста, примите его и отметьте этот вопрос как ответ. –

ответ

0

Ну, я узнал, что мой код был источником проблемы. Проблема возникает, когда элемент управления формы DockContent генерирует исключение в методе Dispose(). Элемент управления не утилизируется правильно, и по какой-то причине элемент управления DockContent закрывается неправильно.

+0

Исключенное исключение прерывает процесс закрытия. Это следует ожидать, поскольку шаблон dispose должен _never_ ожидать, что исключение будет выбрано. – roken

+0

Если вы знаете о FxCop и Mono Gendarme, вы должны знать правила, которые ловят такие нарушения, http://msdn.microsoft.com/en-us/library/bb386039.aspx –