【问题标题】:My UserControl Crashes Visual Studio Whenever I Add It To A Form每当我将 UserControl 添加到表单时,Visual Studio 就会崩溃
【发布时间】:2012-09-05 18:40:06
【问题描述】:

我写了一个小的System.Windows.Forms.UserControl,叫它userControl1,它似乎按我想要的方式工作。

在 Visual Studio 2010 的设计器中,我可以将 userControl1 从工具栏中拖放到我将调用 testForm1 的 Windows 窗体上。我可以连接userControl1,它可以正常工作。

但是,userControl1 的目的是能够在另一个UserControl 中使用它,我们称之为userControl2

在 Visual Studio 2010 的设计器中,如果我将 userControl1 从工具栏中拖放到 userControl2,Visual Studio 2010 将崩溃,除了正在重新启动之外没有任何消息。

与此同时,事件查看器中记录了一个应用程序错误,事件 ID 为 1000:

Faulting application name: devenv.exe, version: 10.0.40219.1, time stamp: 0x4d5f2a73
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc00000fd
Fault offset: 0x0965f816
Faulting process id: 0x1580
Faulting application start time: 0x01cd90f84338e443
Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
Faulting module path: unknown
Report Id: 49ddcedf-fcf8-11e1-8016-00248103a942

如何尝试调试此错误?我应该查看userControl1userControl2 中的内容吗?

一些注意事项:

  • 1) 我还可以将userControl2 从工具栏中拖到testForm1 上,它在 VS2010 Designer 和运行测试应用程序时都可以正常工作(即显示)。

  • 2) 我已成功进入userControl2 的设计器,我在其中声明并设置了userControl1 的所有值,但userControl1 在运行时不会显示在testForm1 上。如果我在 VS2010 设计器的 userControl2 属性窗口中选择 userControl1,Visual Studio 将崩溃。

  • 3) 如果有帮助,我很乐意发布代码。您更喜欢userControl1userControl2 的代码吗?虽然这两个控件都很小,但仍然有很多代码(特别是因为这个错误很可能发生在 Designer 中,所以我也必须发布它。

【问题讨论】:

  • 运行两个 Visual Studio 实例,在两个实例中打开此项目,并在其中一个实例中使用 Attach to process... 选项第二个实例来调试它(devenv.exe 进程)。然后您应该能够看到异常是什么。
  • UserControl 中的一些代码也在设计时运行。该代码有一个错误,它会触发 StackOverflowException。一个非常致命的错误,这也使 VS 下降。寻找递归属性设置器/获取器,如果找不到,请注释掉。
  • 你们太棒了!就像 Hans 指出的那样,我必须在我的代码中添加新的东西。因此,使用附加到 VS 的 Lukasz 的 VS,我发现我在哪里为 Height 和 Width 声明了新变量,以便我可以设置容器属性而不是处理 Resize 事件。
  • 我已经发布了我的建议作为答案。我很高兴它有帮助:)。
  • 谢谢大家!我遇到了同样的问题,这是由于我的用户控件属性的无限循环返回了它自己的值!

标签: c# winforms visual-studio-2010 user-controls


【解决方案1】:

这似乎有助于解决问题,所以我将其发布为答案。

为了在 Visual Studio 设计器中调试您的控件,请运行两个 Visual Studio 实例并在这两个实例中打开您的项目。然后,在其中一个实例中使用 Attach to process... 选项并附加到第二个实例以对其进行调试(devenv.exe 进程)。这样,您应该能够看到异常是什么。

【讨论】:

  • 请注意,Visual Studio 可能不是 devenv.exe;对我来说,运行 Visual Studio 2012 Express for Desktop,如果我没记错的话,它是 WDExpress.exe。
  • 这种方法比我预期的要容易得多。我的问题原来是一个版本控制问题,它引用了从嵌套 UserControl 的 Load 事件调用的第三方控件。
  • 我遇到了类似的问题 - 我的 UserControl 在加载时会冻结设计器。结果是一个参数被设置为空,然后加载了我的实体框架上下文,它正在等待一个标志来说明另一个进程,这是应用程序启动的一部分,这在设计模式下永远不会发生。我使用您的方法进行了检查,发现在检查参数值时缺少“not”。谢谢。
  • 卢卡斯 M!!!!你帮了我很多!!!我正在重写 OnPrint 方法并调用 this.OnPrint(e) ,这导致堆栈溢出异常!谢谢...我改变了 base.OnPrint(e);现在一切正常!!!
【解决方案2】:

您的控件的构造函数中可能有一些东西试图访问另一个不可用的东西,或者正在创建一个 IDE 无法捕获的异常(StackOverflow、OutOfMemory 等)

【讨论】:

  • 如果 Lukasz 回来并发表他的评论作为答案,我会将其标记为解决方案。如果他没有,欢迎您通过添加他的评论来更新您的帖子,我会将您的评论标记为答案。
猜你喜欢
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多