winforms System.ArgumentException:“参数无效,”隐藏按钮时

ax6ht2ek  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(228)

经过多年的相同代码,突然我与这个随机出现的参数,这是不是一个有效的错误在我的许多按钮.它开始与错误出现在按钮上,我有背景图像,删除图像后,这些按钮上的错误停止零星出现.现在,我认为我有这个问题的固定,这确认按钮,我必须隐藏后点击(并且显然在选择一个项目后再次显示)是偶尔丢弃此错误.这已经是相同的确切代码为文字年现在.从来没有一个问题.有没有这个按钮上的图像,我确实会在每次选择一个项目时改变它上面的文本,我确实会这样做。Show()。我可以使用这个150次,它会在第151次执行,它完全是随机的,没有任何模式。
当异常发生时,它在btnConfirm.Hide()上停止;行,即使现在它在try-catch中,它仍然给我一个未处理的异常。
以下是例外详细信息:

System.ArgumentException
  HResult=0x80070057
  Message=Parameter is not valid.
  Source=System.Drawing
  StackTrace:
   at System.Drawing.Image.get_Flags()
   at System.Windows.Forms.ControlPaint.IsImageTransparent(Image backgroundImage)
   at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle, Color backColor, Point scrollOffset)
   at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle)
   at System.Windows.Forms.Control.OnPaintBackground(PaintEventArgs pevent)
   at System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
   at System.Windows.Forms.Control.WmEraseBkgnd(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.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)

我还要补充的是,这些异常细节与我从带有图像的按钮中获得的异常细节几乎相同。唯一的区别是我在代码中没有对它们做任何事情,它只是在处理表单的过程中随机丢弃异常。

piok6c0g

piok6c0g1#

垃圾收集是随机发生的。如果你的图像被加载,并且没有对图像的引用,那么它们可能正在被处理,或者你的代码中的某个地方正在处理它们。
下面的代码生成相同的错误消息。

try {
        Image someImage = Image.FromFile(...);
        someImage.Dispose();
        MethodInfo mi = typeof(ControlPaint).GetMethod("IsImageTransparent", BindingFlags.Static | BindingFlags.NonPublic);
        mi.Invoke(null, new Object[] { someImage });
    } catch {
    }
hxzsmxv2

hxzsmxv22#

好吧,这可能不是一个答案的预期方向,但我花了一整天的时间从VS 19迁移到VS 22与一个新创建的WinForms项目。这包括从.Net Framework 4.7.2到6.0的移动。在复制了我所有的代码和designer.cs之后,程序运行完美,因为它已经运行了多年。真的不知道是什么导致了这个问题,但不管它是什么,它都留在VS 19/.Net 4.7.2中。

相关问题