为什么这个WinMobile (Compact Framework)应用程序在拍照后挂起

本文关键字:应用程序 挂起 Framework WinMobile Compact 为什么 | 更新日期: 2023-09-27 18:11:26

我有一个非常困难的时间试图调试/修复一个应用程序。

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

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

  • 如果用户不拍照,SIP键盘工作正常

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

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

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

当我把拍照和表单显示(创建一个"向导")结合在一起时,事情就变糟了。

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

基本上用户拍了一张照片,然后通过一些表单(当他们点击"下一步"按钮时,我隐藏了一个表单,显示了另一个表单)

表单。在拍摄照片后从主表单调用Show然后我有这样的内容:

while(UserNotFinished)
{
   Application.DoEvents()
}

其中UserNotFinished是在我的向导/表单按下"提交"按钮后设置的标志。

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

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

真正令人困惑的部分是这在一个设备上工作,但在另一个设备上不起作用。事实上,设备完全挂起了。它结束了活动同步连接,有时我必须通过移除电池来硬复位。

为什么这个WinMobile (Compact Framework)应用程序在拍照后挂起

我认为你的问题源于while(true) {DoEvents();也许你是如何尝试在不同的形式之间转换的。我唯一一次使用DoEvents()方法是当我已经在一个窗口事件的范围内,我需要确保消息队列中的一些东西被处理,所以屏幕更新是正确的。我建议创建一个控制器类来管理向导的屏幕流。您可以通过使用ShowDialog()并直接在单个调用范围内执行流控制来控制屏幕流,或者您必须使用Show()和异步机制,例如在控制器类中订阅和处理特定的表单和控件事件。还看到了关于引入另一个线程的评论,注意表单属于创建它们的线程,您必须在创建线程的上下文中调用(…)所有表单成员。

嗯。非常奇怪的

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

我不知道为什么

,(真正的){DoEvents ()}