1

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

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

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

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

我使用的是 Win7 64 位 m/c。

此外,即使我签入 spy++,它也没有在表单中显示任何内容 - 因此它没有使用任何控件呈现。也没有为 DEBUG 隔离代码。

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

4

3 回答 3

2

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

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

于 2013-01-21T06:53:37.117 回答
0

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

于 2013-01-21T13:56:02.617 回答
0

StartPosition在我遇到的类似情况下,将表单设置为例WindowsDefaultLocation如有CenterScreen帮助。

于 2021-10-07T16:00:16.107 回答