How can I accomplish this with 1 semicolon?
What's the problem?
new Thread(() => MessageBox.Show("test")).Start();
Upd.
the easiest way to pass something to lambda is a closures (this is how your question looks). That's why they are so convenient. By passing parameters like shown here, you're destroying all preferences of lambdas. This should be clear for you from your next question about passing two or more parameters.
Using closures, you can do this easily:
// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...
// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();
Without them you need to get (or make) some type, which will be a container for your parameters, create instance of that type and initialize it members. Indeed, this is the work compiler does for you, when you're using closures. So, why do you prevent the compiler to do all this dirty job?