【问题标题】:C#: Exception - Parameter is not valid - Form Dispose methodC#:异常 - 参数无效 - 表单 Dispose 方法
【发布时间】:2011-01-07 06:18:04
【问题描述】:

在将formobject 与另一个exception 分开时,Parameter is not valid 正在抛出类似Parameter is not valid

访问第二个表单的代码

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

这里是表单处理方法(来自Designer.cs)

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

这是堆栈跟踪

     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

会有什么问题。 请帮帮我。

【问题讨论】:

  • 你能把堆栈跟踪放在这里吗?
  • 能否向我们展示您用于实例化您尝试处置的对象的代码?我认为您可能正在尝试处理静态对象,所以我只是想确保它不是那个
  • 您能否尝试创建一个小样本来重现此问题...这似乎不是您可以远程解决的问题。代码看起来没问题。你在这个表单上有自定义控件吗?
  • 好的,我不知道,有人点亮了 Jon Skeet 的天空信号
  • 第一个代码sn-p不能准确。避免将其编辑到您认为有问题的地方。

标签: c# exception


【解决方案1】:

我必须查看代码才能确定,但​​也许我可以帮助您查看正确的位置...

堆栈跟踪表明在 Dispose 序列期间正在重绘 pictureBox 中的动画。那么为什么图片框在它应该死的时候却试图这样做呢?

在这种情况下,您可能需要执行以下操作:在释放窗口之前关闭()窗口,彻底关闭(例如,在调用 base.Dispose()之前禁用图片框中的动画),或者可能还有其他在您的类中创建并且需要在您可以安全地调用 base.Dispose 之前释放的资源。或者,您可能已经处理了仍然需要的东西(例如,pictureBox 试图访问的图像) - 检查处理“组件”将实际处理的内容。

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多