不在调试模式下呈现控件

时间:2013-01-21 06:43:06

标签: c# winforms

我有一个winform应用程序,我在一个新线程上调用一个设置窗口作为ShowDialog。

当我在调试模式下运行应用程序时,设置窗体的Show()事件不会触发。我尝试了备用Load()事件并且它工作正常。在这个方法中,我填充一个列表(DataGridView)并显示它。表单呈现时,没有任何显示。它只是一个空白的形式。

但是,对于相同的代码,当我在没有调试的情况下运行它(ctrl + F5)时,会触发Show()方法并显示列表。

代码是庞大框架的一部分,因此,我认为我无法提供足够可理解的措施。

使用Win7 64位m / c。

此外,即使我在spy ++中检查过,它在表单中也没有显示任何内容 - 因此它没有使用任何控件进行渲染。 DEBUG也没有代码被隔离。

为什么会发生这种情况以及可能需要更改哪些设置?

2 个答案:

答案 0 :(得分:2)

我认为解决方案非常简单。在WinForms编程中,有一种叫做UI Thread的东西。这意味着应该在此线程上执行所有与UI相关的代码。如果在非UI线程上执行UI相关代码,则会出现“跨线程操作无效”异常或意外行为。

我认为这里的解决方案是在UI线程而不是新线程上创建设置窗口。

答案 1 :(得分:0)

对于初学者来说,在一个新线程上调用ShowDialog()表明你真的想要调用Show()。也就是说,当调试和发布版本的执行方式不同时,通常意味着某些内容不同步。不知道它是如何或为什么会发生,但修复通常就像点击“重建解决方案”一样简单。