【发布时间】:2017-12-09 17:01:51
【问题描述】:
我有一个 winforms 应用程序。在开发模式下,从 Visual Studio .NET 2003 调试时(是的,我知道它很旧,但这是一个遗留项目),当我尝试打开新表单时出现此错误。为了打开一个新表单,我得到一个表单实例,然后调用 ShowDialog() 方法,例如:
frmTest test = new frmTest(here my parameters);
test.ShowDialog();
如果我在调试时按 F11(进入)它不会崩溃,但是如果在我实例化表单的行中我按 F10 进入下一行,即 test.ShowDialog(),那么它会崩溃显示这个错误。
完整的消息错误是:
“发生“System.ApplicationException”类型的未处理异常 在 System.drawing.dll 中。附加信息:已尝试 释放一个不属于进程的互斥"
我已经翻译了最后一部分:附加信息......因为它以西班牙语出现。
我用参数实例化的表单,它的构造函数,包括初始化一些变量,例如:
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 属性加载。可能是因为这些图片导致的错误?
【问题讨论】:
-
您可以尝试删除所有图片框的图像属性并运行程序。如果运行良好,则开始一次设置一个图片框的属性并运行程序以确定哪个图片框是问题的原因。
-
如果您无法移植,还可能值得通过获取完整的堆栈跟踪并使用 JetBrains 的免费 dotPeek 等反编译工具来进一步跟踪它,以查看 .net 1.1 dll 的源代码正如@III 建议的那样。
-
这是一个非常奇怪的例外。但谁知道呢,ApplicationException 是 .NET 1.0 的设计错误之一。这个问题需要更好的、非翻译的异常消息和堆栈跟踪。但这可能是一个线程错误,.NET 1.x 在没有像样的诊断的情况下很容易出错。使用调试器的 Debug > Windows > Threads 窗口查看发生了什么。
-
我认为您应该向我们展示表单构造函数中发生了什么,也许我们可以为您提供更多帮助
-
可能图像是异步加载的,表单还没有准备好被调用(ShowDialog 方法)。你不能在你的表单上创建一个可以在加载/渲染后触发的事件/委托。该事件将调用“test.ShowDialog(); 代码。希望这会有所帮助
标签: c# winforms visual-studio picturebox .net-1.1