0

我很难调试/修复应用程序。

简要地说: - 我创建了一个“向导”类型的应用程序,该应用程序从用户拍照开始(使用照片的通用对话框)

  • 如果用户在拍摄照片后尝试使用文本输入窗口 (SIP)(小键盘输入窗口),则事件循环似乎挂起 - 事件未处理或延迟一段时间。

  • 如果用户不拍照,则 SIP 键盘效果很好。

  • 这只发生在我的一些设备上。具体来说,这不是 MC65 上的问题,而是 ES400 上的问题。

应用程序的事件循环似乎被我显示表单和拍照的方式搞砸了。

如果创建了一个包含一个按钮(事件处理程序拍摄照片)和一个接受输入的文本框的单一表单的简单测试应用程序。这很好用。但它只是一个单一的表单应用程序,什么都不做。

当我将照片拍摄与我的表格显示(制作“向导”)结合起来时,事情变得很糟糕。

我想知道我应该运行什么样的事件循环?

本质上,用户拍照然后浏览一些表单(当他们单击“下一步”按钮时,我隐藏一个表单并显示另一个表单。)

拍摄照片后,从主窗体调用 Form.Show,然后我有类似的东西:

while(UserNotFinished)
{
   Application.DoEvents()
}

UserNotFinished按下“提交”按钮后,我的向导/表单中设置的标志在哪里。

我很乐意提供更多代码,但不确定什么有用。

我是 C# 和 CF 开发的新手(多年的 C++/Win32)

真正令人困惑的部分是,这适用于一台设备,但不适用于另一台设备。事实上,设备完全挂起。它结束了 activesync 连接,有时我必须通过取出电池来硬重置。

4

2 回答 2

1

我认为您的问题源于 while(true) { DoEvents(); },也许你是如何尝试在表单之间进行的。我使用 DoEvents() 方法的唯一一次是当我已经在 Windows 事件的范围内并且我需要确保消息队列中的某些内容得到处理以便屏幕更新正确时。我建议制作一个控制器类来管理您的向导的屏幕流程。您可以通过使用 ShowDialog() 来控制屏幕流,并在单个调用的范围内直接执行流控制,或者您必须使用 Show() 和异步机制,例如订阅和处理特定的表单和控件控制器类中的事件。还看到了关于引入另一个线程的评论,请注意表单属于创建它们的线程,您必须 Invoke(...

于 2011-10-18T13:40:24.997 回答
0

唔。很奇怪

我开始了一个新线程,基本上也调用了 Application.DoEvents() ,它似乎解决了这个问题......

我不知道为什么

而(真){DoEvents()}

在主线程中不起作用。

于 2011-10-17T22:28:19.497 回答