-1

我正在创建一个 POS 应用程序。我从 POS 打印机开始,它正在工作。之后,我添加了“打开现金抽屉”功能。但它以某种方式干扰了POS打印机。

那么发生了什么?

当我只要求一台 POS 打印机时,打印效果很好。此外,当我只领取现金抽屉时,抽屉可以正常打开。所以那里没有问题。

但是,当我同时要求两者(POS 打印机和抽屉)时,打印会卡住或冻结。抽屉仍然可以正常打开。大多数时候,当我声称两者时,第一个打印件看起来不错,但它并没有剪纸。当我再次打印时,程序冻结。

不知何故,我不能同时使用这两个对象:

OPOSPrinter oposprinter = new OPOSPrinter(); // Has the Windows.Devices.PointOfService.PosPrinter class
OposCashDrawer oposcashdrawer = new OposCashDrawer(); // Has the Windows.Devices.PointOfService.CashDrawer class

当我声称ClaimedCashDrawer然后这条线给出ClaimedPrinter = await CurrentPrinter.ClaimPrinterAsync();了一个null.

我在这里上传了一个示例项目:https ://github.com/hellyeahniels/TestPrintAndDrawer

请有人向我解释什么是错的以及如何解决这个问题?

提前致谢。

4

1 回答 1

1

它由两个因素组成。

  • 可能是因为您有一个现金抽屉连接到打印机的扩展。
  • 并且由于打印机厂商提供的OPOS服务对象是设计成不能同时使用打印机和钱箱的。

这种配置称为 hydra 设备。

一些打印机供应商的规范允许打印机和现金抽屉即使在这种配置下也可以独立运行。

如果您从该供应商切换到打印机,或者将缓存抽屉切换到独立工作的打印机,而不是通过打印机,您不必小心。

如果你想按原样使用,好像打印机厂商提供的OPOS服务对象的注释中描述了使用方法,所以请按照。

很可能,打印机和缓存抽屉不能同时使用,如果使用了,则通过Claim方法获取排他控制权,完成后通过Release方法释放排他控制权。


顺便说一句,您使用的 API 似乎是Windows.Devices.PointOfService,而不是POS for.NET
请更正问题的描述和标签的内容以适合您。

如果是这样,请将我提供的方法名称替换为合适的名称。

于 2022-02-03T06:55:17.323 回答