【问题标题】:Compact Framework: Show Dialog and executing code AFTER the form showsCompact Framework:在表单显示后显示对话框并执行代码
【发布时间】:2011-02-21 14:24:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: winforms compact-framework showdialog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

      • 一位同事将我指向 NativeWindow,而我已经在另一个上下文中使用 MessageWindow... 我会进一步研究。听起来这是解决这个问题的最可行的答案。
      • 那是徒劳的。原来紧凑框架中有 0x18 消息(WM_SHOWWINDOW)......根本......所以现在有 Show 事件,因为 CE 的消息泵没有该消息。什么废话?!....
      • 当然,这就是 CF 没有 Shown 事件的原因。但是如果你有它的子类,你可以查看 WM_WINDOWPOSCHANGED、WM_ENABLE 和 WM_CREATE 之类的东西来确定它何时显示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2013-03-16
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      相关资源
      最近更新 更多