Winforms 表单在等待输入时挂起

Winforms 表单在等待输入时挂起,winforms,credit-card,Winforms,Credit Card,我已经为我们公司编写了一个定制销售点系统。我的一切都正常,但发现了一个小错误。当所有物品被添加到销售中后,当他们点击“信用”按钮时,它会打开一个信用卡处理corm,并具有监听刷卡的功能。刷卡后,它会填充所有字段并询问CVV编号,然后他们点击流程按钮,一切结束 问题是,他们说他们“意外”撞到了信用卡。程序冻结,等待刷卡。关闭窗口按钮,一切都不响应输入。我想有一种方法,有功能,听卡运行,但让一切进行以及。我的侦听器方法如下 Private Sub LoadCardReader() Timer

我已经为我们公司编写了一个定制销售点系统。我的一切都正常,但发现了一个小错误。当所有物品被添加到销售中后,当他们点击“信用”按钮时,它会打开一个信用卡处理corm,并具有监听刷卡的功能。刷卡后,它会填充所有字段并询问CVV编号,然后他们点击流程按钮,一切结束

问题是,他们说他们“意外”撞到了信用卡。程序冻结,等待刷卡。关闭窗口按钮,一切都不响应输入。我想有一种方法,有功能,听卡运行,但让一切进行以及。我的侦听器方法如下

Private Sub LoadCardReader()
    Timer1.Stop()
    If IsNothing(_Device) Then
        _Device = HidDevices.Enumerate(2049, 2).FirstOrDefault()
    End If

    _Device.OpenDevice()
    _Device.MonitorDeviceEvents = True
    Dim report As HidReport = _Device.ReadReport() 'This is where it hangs'
    ParseReport(report)
End Sub

我从另一条路接近它,让它工作。我编写了一个windows应用程序,在POS启动时调用它。它什么也不做,只是监听刷卡,然后将其写入文本文件。然后我在POS机上放了一个计时器,查看文本文件是否存在。如果它这样做了,它将读取数据并进行解析,然后删除该文件,这样它就不会再次拾取该文件。有人认为这有问题吗?

如果你希望表单在等待输入时响应,你必须进行多线程编程。是的,我研究了多线程,但我看不到如何在完成收费后将信用卡条目中的数据发送回主POS机。多线程比你想象的更复杂,通常情况下,您不能从子线程移回主线程。您能否更具体地说明您希望如何处理数据?请使用表单的BeginInvoke()方法。您使用的是什么类还不太清楚,但是如果我猜对了,那么您可能应该考虑读取RealRePress回调委托参数的Read RePoT()重载。应该是非阻塞呼叫。有人认为有问题吗?你真的需要看看PCI-DSS(和PA-DSS)它让我惊讶的是,你竟然在不知不觉中走到了这一步?