System.Drawing.dll中发生未处理的“System.ApplicationException”类型异常

问题描述 投票:16回答:3

我有一个winforms应用程序。在开发模式下,从Visual Studio .NET 2003进行调试时(是的,我知道它已经过时,但这是一个遗留项目),当我尝试打开一个新表单时出现此错误。为了打开一个新表单,我得到一个表单实例,然后我调用ShowDialog()方法,例如:

frmTest test = new frmTest(here my parameters);
test.ShowDialog();

如果我按F11(步入)调试它没有崩溃,但如果在我实例化表单的行中我按F10进入下一行,即test.ShowDialog(),然后它崩溃显示此错误。

完整的消息错误是:

“System.drawing.dll中发生了'System.ApplicationException'类型的未处理异常。附加信息:试图释放不属于该进程的互斥”

我翻译了最后一部分:附加信息......因为它出现在西班牙语中。

我用参数实例化的表单,它的构造函数,包括初始化一些变量,例如:

public frmTest(string param1, string param2)
{
   InitializeComponent();

   this.param1 = param1;
   this.param2 = param2;
}

private void frmTest_Load(object sender, EventArgs e)
{
    // here I call a remote webservice asynchronously.
}

我的表格“frmTest”还有四个图片框,一个标签和一个按钮。其中三个图片框包含一个png图像(它是在设计时通过Image属性分配的),最后一个图片框包含一个动画gif,也是通过Image属性在设计时加载的。可能由于这些图像而发生错误?

c# winforms visual-studio picturebox .net-1.1
3个回答
0
投票

框架本身不会抛出应用程序异常:what-is-applicationexception-for-in-net;问题应该在你没有框架的代码中。还要确保在执行操作之前检查“InvokeRequired”属性,如果是,请使用“Invoke”方法运行该方法。可以检查c-sharp-cross-thread-call-problem


0
投票

可能是异步调用正在尝试访问UI线程。

确保您没有使用像TextBox.Text这样的控件属性。如果是这样,您只需将其值传递给异步调用,或者在调用之前将其存储在类变量中。

此外,在异步调用中,您无法为该属性分配值。请改用Invoke()


-1
投票

尝试添加异常断点,VS将在导致异常的指令处停止。实际的堆栈跟踪可能会有所帮助。

您是否尝试关闭VS的本地变量观察窗口?也许它正在为UI组件评估一些东西,其中访问线程应该等于UI组件的所有者线程!

© www.soinside.com 2019 - 2024. All rights reserved.