SteveP,
One method which you should be able to use to accomplish this is rather than calling read with an infinite timeout, is to poll the number of samples available using DAQmxGetReadAvailSampPerChan. If this number equals your finite acquisition size in samples per channel, then you know that your acquisition has completed and data is ready to be read. In a loop you can periodically check the number of samples available. Break out of this loop once all the samples you are expecting have arrived, or when you would like to abort. After this, call DAQmx Read if you haven't aborted. Since you will have ensured that all samples are available before you call read, you can specify a very small read timeout.
Hope this helps,
Dan