您需要做一些事情(对于 VB 代码很抱歉,但转换为 C# 应该很简单):
无论您是使用Actions.Inventory.Perform()
还是Actions.TagAccess.OperationSequence.PerformSequence()
需要TriggerInfo
定义并传递给这些方法,而不是常规的无参数调用。该结构包含实际的触发事件。
Imports Symbol
Imports Symbol.RFID3
Imports Symbol.RFID3.Events
Imports Symbol.RFID3.TagAccess
Private Sub DoRead()
triggernfo = New TriggerInfo()
triggernfo.TagReportTrigger = 1
triggernfo.StartTrigger.Type = START_TRIGGER_TYPE.START_TRIGGER_TYPE_HANDHELD
triggernfo.StartTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED
triggernfo.StopTrigger.Type = STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT
triggernfo.StopTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED
triggernfo.StopTrigger.Handheld.Timeout = 0 'Default handheld timeout value
'Then you need to pass it to the Perform() OR PerformSequence() call:
_Reader.Actions.TagAccess.OperationSequence.PerformSequence(Nothing, triggernfo, Nothing)
'OR
_Reader.Actions.Inventory.Perform(Nothing, triggernfo, Nothing)
End Sub
重点是你现在不需要每次都调用Perform()
或开始阅读,你只需定义一个连接阅读器并在其中调用触发器的过程,它只会在触发器时自动激活用来。根据您编码的方式,我认为您可以按原样使用当前的委托回调,如果使用 Read 委托(我现在在推测,因为我还没有看到您的代码)。PerformSequence()
Form.Load
Perform()
GetReadTags()
最后,在您的 Status 委托调用中,您现在可以将 aSymbol.RFID3.Events.STATUS_EVENT_TYPE.HANDHELD_TRIGGER_EVENT
作为 EventData。如果你进一步挖掘,你会发现里面eventData.HandheldTriggerEventData.HandheldTriggerEvent
可以是HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED
或HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED
。无需对此事件执行任何操作即可实际读取标签,这是毫无价值的,即使您在这里什么也不做,触发和读取仍然会发生。
实际上,弄乱事件(比如停止或开始读取)可能会使触发器引发错误,所以除非你有迫切的需要(就像我今天有的那样),否则请使用 TriggerInfo 对象并单独留下 Status 委托;)