<p>I have a Selenium test case that enters dates into a date selector made up of three pulldowns (year, month, and day). </p>

<pre><code>select validity_Y label=2008
select validity_M label=08
select validity_D label=08
</code></pre>

<p>This part gets repeated a lot throughout the test case. I'd like to reduce it by defining my custom action "selectValidity", so that I can have less redundancy, something like</p>

<pre><code>selectValidity 2008,08,08
</code></pre>

<p>What is the best (easiest, cleanest) way to add macros or subroutines to a test case?</p>

You aren't allowed to make WinForms calls from other threads.  Look at BeginInvoke in the form -- you can call a delegate to show the form from the UI thread.
Edit: From the comments (do not set CheckForIllegalCrossThreadCalls to false).
More Info
Almost every GUI library is designed to only allow calls that change the GUI to be made in a single thread designated for that purpose (called the UI thread). If you are in another thread, you are required to arrange for the call to change the GUI to be made in the UI thread. In .NET, the way to do that is to call Invoke (synchronous) or BeginInvoke (asynchronous). The equivalent Java Swing call is invokeLater() -- there are similar functions in almost every GUI library.