【问题标题】:Program only works correctly in debug mode程序只能在调试模式下正常工作
【发布时间】:2016-09-02 08:27:59
【问题描述】:

这是我之前的问题,如果您想了解有关我当前问题的更多信息:

WinForm: Inherited Panel wont Autosize

如果你不想通读它,我会给你一些一般信息:

  • 我没有直接通过该程序工作,我只是在编辑一个特定的 DLL,该程序使用该 DLL
  • 也就是说,我无权访问此特定程序的源代码
  • 这也意味着我必须通过 DLL 中的一些更改来解决这个问题,即 - 正如我之前提到的 - 该程序使用的。

到目前为止我发现了什么:

  • 如果我将程序附加到 VS2015 中的 DLL 源代码,它可以正常工作。
  • 但是,如果我构建代码然后将 DLL 复制到程序的文件夹中,它会出现一些故障 - 这也是我的实际问题:它以某种方式将 tableLayoutpanel 缩小到其实际大小的一半,而我在另一半出现了一些奇怪的故障它的实际,在正常开始时不知何故未使用,大小。

我尝试了什么:

  • 我手动更改了大小,而不是通过"Dock = Fill" or "Autosize = true",它起作用了。但是,正如你们都知道的那样,这不是最好的解决方案,我们只想使用它,如果绝对没有其他方法可以解决它。没有人喜欢硬编码。

  • 我尝试通过以下方式继承其父级的大小:

    this.tablelayoutPanel.Size = this.Size; 和
    this.tableLayoutPanel.Size = new Size(this.Height, this.Size);

那么你们有什么想法吗?

【问题讨论】:

  • 如何调试发布模式版本?
  • 这种情况发生在我身上一次。事实证明,这两个进程的环境变量是不同的。您可以使用进程资源管理器找到它。
  • @UweKeim 是的,这听起来是个好主意。我很快就会试试看。
  • @neohope 你的意思是任务管理器中的进程浏览器?

标签: c# winforms visual-studio debugging dll


【解决方案1】:

好吧,我不明白为什么调试器可以工作,而发布/调试版本却不能。但我只是用Application.DoEvents() 强制重绘tableLayoutPanelMainwith。我以前从未尝试过,因为 Invalidate() + Update() 或 Refresh() 不起作用 - 我想:好吧,那不会那么容易,所以别管它了。

但是经过一些反复试验和大量时间...好吧,我为此工作了两个星期...我尝试了最简单的方法,是的,它奏效了!

无论如何,谢谢你们的帮助,伙计们。我很感激。

【讨论】:

  • 如果您正在使用 DoEvents 解决问题,那么您很可能是在掩盖真正的问题,而不是修复它。修复 DoEvents 的问题是危险的;它可能会引入意外的重入。它是随机解决问题的症状,而不是理解问题并在架构级别应用有原则的正确解决方案。
  • 那么您有任何正确修复它的想法吗?为什么 Refresh() 不起作用?我真的相信使用我们 DLL 的团队已经解决了这个问题。我的解决方案更像是一种解决方法。我知道这一点,但只要我不被允许更改外部源代码,这是我修复它的唯一方法。我对这个解决方案也不是很“满意”,因为我真的相信这也会损坏使用相同 DLL 的其他程序。但是:无论如何它都在测试准备中,所以只要它有效:没关系。如果没有:我会尝试寻找另一个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
相关资源
最近更新 更多