<p>I'm looking to implement a function that retrieves a single frame from an input video, so I can use it as a thumbnail.</p>

<p>Something along these lines should work: </p>

<pre><code>// filename examples: "test.avi", "test.dvr-ms"
// position is from 0 to 100 percent (0.0 to 1.0)
// returns a bitmap
byte[] GetVideoThumbnail(string filename, float position)
{
}
</code></pre>

<p>Does anyone know how to do this in .Net 3.0? </p>

<p>The correct solution will be the "best" implementation of this function. 
Bonus points for avoiding selection of blank frames. </p>

This project will do the trick for AVIs:
http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx
Anything other formats, you might look into directshow.  There are a few projects that might help:
http://sourceforge.net/projects/directshownet/
http://code.google.com/p/slimdx/