JMD:
You can abort any DAQmx operation by calling the Task.Control method and specifying TaskAction.Abort. When a task is aborted, it is returned to the Verified state. If the task is running, it is stopped as soon as possible and is then unreserved. After a task has been aborted, you can continue to use the task. However, you might need to transition the task back to its previous state before continuing the specified operation.
I changed your code to use the Task.Control method and wrote a simple WinForms application that uses it. The code is attached. I hope this helps.
Also, I went ahead and made your AO class disposable since the DAQmx Task class is disposable. I don't know how you're using the AO class in your application, but if you
were to create and destroy instances of the AO class in a loop, for example, you would get Task name conflict exceptions from DAQmx unless the Task instance is disposed.
Chris W
NI .NET DAQmx Team