Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C#: Exception - Parameter is not valid - Form Dispose method

Tags:

c#

exception

While disposing the object of a form from the other an exception is throwing likeParameter is not valid

Code to access the second form

        Assembly X = Assembly.LoadFile(Application.StartupPath + "\\Test.dll");
        Form frminv = (Form)X.CreateInstance("Test.Form1");
        frminv.Dispose();

Here is the form disposal method( from Designer.cs)

protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);// exception is thrown from here
    }

Here is the stack trace

     at System.Drawing.Image.get_FrameDimensionsList()
 at System.Drawing.ImageAnimator.CanAnimate(Image image)
 at System.Drawing.ImageAnimator.ImageInfo..ctor(Image image)
 at System.Drawing.ImageAnimator.Animate(Image image, EventHandler onFrameChangedHandler)
 at System.Windows.Forms.PictureBox.Animate(Boolean animate)
 at System.Windows.Forms.PictureBox.Animate()
 at System.Windows.Forms.PictureBox.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Form.OnVisibleChanged(EventArgs e)
 at System.Windows.Forms.Control.WmShowWindow(Message& m)
 at System.Windows.Forms.Control.WndProc(Message& m)
 at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
 at System.Windows.Forms.ContainerControl.WndProc(Message& m)
 at System.Windows.Forms.Form.WmShowWindow(Message& m)
 at System.Windows.Forms.Form.WndProc(Message& m)
 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.IntDestroyWindow(HandleRef hWnd)
 at System.Windows.Forms.UnsafeNativeMethods.DestroyWindow(HandleRef hWnd)
 at System.Windows.Forms.NativeWindow.DestroyHandle()
 at System.Windows.Forms.Control.DestroyHandle()
 at System.Windows.Forms.Control.Dispose(Boolean disposing)
 at System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
 at System.Windows.Forms.Form.Dispose(Boolean disposing)
 at ICFTWaveForm.WaveForm.Dispose(Boolean disposing)
 at System.ComponentModel.Component.Dispose()
 at System.Windows.Forms.Control.Dispose(Boolean disposing)
 at System.ComponentModel.Component.Dispose()
 at System.Windows.Forms.Control.Dispose(Boolean disposing)
 at System.ComponentModel.Component.Dispose()
 at System.Windows.Forms.Control.Dispose(Boolean disposing)
 at System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
 at System.Windows.Forms.Form.Dispose(Boolean disposing)
 at XXXX.frmMain.Dispose(Boolean disposing) in E:\XXXX\XXXX\frmMain.Designer.cs:line 20
 at System.ComponentModel.Component.Dispose()
 at XXXX.TestComponents.OpenComponentForTestting(stComponents TestComponent, stTestStepDetails Test, enExecutionModeTypes Mode, Boolean IsVisibleMode, Int32 nStepIndex, Int32 nTotalSteps) in E:\My Projects\XXXXXXXX\frmMDIContainer.cs:line 3145

what will be the problem. Please help me.

like image 666
Thorin Oakenshield Avatar asked Jan 07 '11 06:01

Thorin Oakenshield


1 Answers

I'd have to look at the code to be sure, but perhaps I can help you look in the right places...

The stack trace indicates that a redraw of an animation in a pictureBox is occurring during the Dispose sequence. So why is the picturebox trying to do this when it's supposed to be dead?

In these sort of cases you may need to do something like: Close() your window before disposing it, shut things down cleanly (e.g. disable animation in the picturebox before calling base.Dispose()), or there may be other resources that are created in your class and need to be disposed before you can safely call base.Dispose. Alternatively, you may have already Disposed of something that is still needed (e.g. the Image that the pictureBox is trying to access) - check what disposing "components" will actually dispose of.

like image 62
Jason Williams Avatar answered Oct 30 '22 05:10

Jason Williams