Compact Framework:显示对话框并在表单显示后执行代码

时间:2010-05-19 20:59:57

标签: winforms compact-framework showdialog

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

我有一个必须使用ShowDialog显示的表单。表单本身只是一个空白屏幕,上面有“loading ...”消息。在窗体显示在屏幕上之后,我需要在同一个线程上运行另一块代码,使用ShowDialog弹出另一个窗体,这样“加载”屏幕就是新屏幕的父窗口。

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

...这个场景的问题是,即使在紧凑的框架中也没有显示,所以我不能做我在这个事件中放置代码的常用技巧。

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

2 个答案:

答案 0 :(得分:0)

好的,我会强烈要求你告诉你这是错误的,你不应该使用ShowDialog。现在我还没说,让我们来看看发生了什么。

你的应用程序在某个时候调用Application.Run。这将设置一个消息泵,将Windows事件分派给系统中正确的Windows(控件)。

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

现在你说你需要弹出另一个对话框(所以创建另一个泵)但你需要在第一个Dialog(而不是整个父表单)中的某种初始化代码之后出现它已经显示。

这一切都正确吗?如果是这样,我认为我会看两条路线。首先,我将介绍在第一个Dialog中覆盖OnActivated。由于您使用的是ShowDialog,我认为它几乎与Shown事件同义。

如果这不能满足您的需求,那么我会考虑在第一个对话框中添加MessageWindow(或使用SDF's NativeWindow to subclass it)并查看所有Windows消息来提供你自己的展示活动。

答案 1 :(得分:0)

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