I've used a COM-based TWAIN component because it was free. I've used a
third party component (from Pegasus Imaging) because it was available,
easy to use and available in managed code. In both cases, the trick was
understanding the TWAIN event model because in both cases, that was the
underlying standard that was used.