I am trying to use this callback stuff for counters now. I am using a 1 Hz trigger on a counter channel and it isn't passing the If runningTask(TaskNumber) Is ar.AsyncState Then
statement. Any ideas?
Creating the counter:
Public CtrCallback As AsyncCallback = New AsyncCallback(AddressOf CounterReadCallback)
If DIChannelCount > 0 Then
Try
For cnt = 0 To DIChannelCount - 1
Tasks(14 + cnt) = New Task("Counter" & cnt)
With DIChannels(cnt)
Tasks(14 + cnt).CIChannels.CreateCountEdgesChannel(.Device & "/" & .Channel, "Count Edges", _
CICountEdgesActiveEdge.Rising, Convert.ToInt64(0), CICountEdgesCountDirection.Up)
Tasks(14 + cnt).Timing.ConfigureSampleClock(.Device & "/" & .Trigger, 1, SampleClockActiveEdge.Rising, _
SampleQuantityMode.ContinuousSamples, 1)
End With
runningTask(cnt) = Tasks(14 + cnt)
myCICounterReader(cnt) = New CounterReader(Tasks(14 + cnt).Stream)
myCICounterReader(cnt).SynchronizeCallbacks = True
myCICounterReader(cnt).BeginReadSingleSampleUInt32(CtrCallback, cnt)
Next
Catch exception As DaqException
MsgBox("Counters" & vbNewLine & exception.Message)
'Tasks(15).Dispose()
End Try
End If
Async Function
Public Sub CounterReadCallback(ByVal ar As IAsyncResult)
Dim TaskNumber As Byte
TaskNumber = CType(ar.AsyncState, Integer)
Try
If runningTask(TaskNumber) Is ar.AsyncState Then
Select Case TaskNumber
Case Is = 0
CTR1 = myCICounterReader(TaskNumber).EndReadSingleSampleUInt32(ar)
Case Is = 1
CTR2 = myCICounterReader(TaskNumber).EndReadSingleSampleUInt32(ar)
End Select
myCICounterReader(TaskNumber).BeginReadSingleSampleUInt32(CtrCallback, TaskNumber)
pubString = TaskNumber & vbTab & CTR1
Else
pubString = TaskNumber & vbTab & "Not Asyncstate"
End If
Catch exception As DaqException
Tasks(14 + TaskNumber).Dispose()
MessageBox.Show(exception.Message)
runningTask(TaskNumber) = Nothing
End Try
End Sub
End Module
Programming Data Acquisition and Control in Measurement Studio and Labwindows/CVI