【发布时间】:2012-03-21 06:54:15
【问题描述】:
使用 Motorola 提供的 CoreScanner 驱动程序,我正在尝试编写一个使用条形码扫描仪的小型 winforms 应用程序。我能够很好地与扫描仪交互,并正确注册 OnBarcodeEvent() 的回调。在这个回调中,我有一个对话框,它打开并显示用户需要填写的屏幕。对话框打开后不久(使用 Show()),程序挂起。如果我使用 ShowDialog(),对话框可以工作,但对话框会阻止 OnBarcodeEvent 事件。
我对正在发生的事情的猜测是,由于对话框是在事件线程上创建的,因此在使用 Show() 时会出现竞争条件。由于 Show() 是非阻塞的,因此线程在显示对话框后继续运行,然后消失。与此同时,我的对话框刚刚失去了它的父级并锁定了?就像我说的......我的最佳猜测。
我该如何补救这种情况?也就是说,我如何编写我的对话框,以便它可以在不挂起的线程中创建?
【问题讨论】: