0

在 .NET Compact Framework、C#、.Net 3.5、Visual Studio 2008 中工作。针对同一项目中的 Windows Mobile 和 CE 设备(它是一个 CE 应用程序,在两种类型的设备上运行)。

我有一个必须使用 ShowDialog 显示的表单。表单本身只是一个空白屏幕,上面有“正在加载...”消息。表单显示在屏幕上之后,我需要在同一个线程上运行另一块代码,该代码将使用 ShowDialog 弹出另一个表单,以便“加载”屏幕是新屏幕的父级。

不要告诉我这种情况是错误的,或者我不应该使用 showdialog。作为一个团队,我们已经经历了这些,这就是我们编写应用程序的方式,因为它解决了许多其他问题。

...但是,这种情况的问题在于,即使在紧凑的框架中也没有 Shown,因此我无法按照通常的技巧将代码放入该事件中来执行此操作。

其他人如何在紧凑的框架中解决这个需求?如果它有帮助,我确实有 OpenNetCF 库......那里有什么可以帮助的吗?

4

2 回答 2

0

最终使用带有布尔值的表单激活来检查我是否完成了工作

于 2010-06-15T14:11:49.797 回答
0

好的,我会忍住我强烈的冲动告诉你这是错误的,你不应该使用 ShowDialog。既然我还没说,让我们看看是怎么回事。

您的应用会在某个时候调用 Application.Run。这会设置一个消息泵,将 Windows 事件分派到系统中适当的 Windows(控件)。

当您调用 ShowDialog 时,系统会设置另一个临时消息泵。这意味着进入此泵的 Windows 事件不会被分派到其他控件之外(这就是您获得模式的方式)。

现在您说您需要在其上弹出另一个对话框(因此创建另一个泵),但是您需要在第一个对话框(不是整个父表单)中的某种初始化代码已显示之后出现.

这一切都正确吗?如果是这样,我想我会考虑两条路线。首先,我会在第一个对话框中查看重写 OnActivated。由于您使用的是 ShowDialog 我认为它几乎与 Shown 事件同义。

如果这不能完全满足您的需求,那么我会考虑将MessageWindow添加到第一个对话框(或使用SDF 的 NativeWindow 对其进行子类化)并查看所有传入的 Windows 消息以提供您自己的 Shown事件。

于 2010-05-19T21:13:18.463 回答