Если не блокируется connection.Open (), в чем я сомневаюсь, проблема в том, что ваша программа достигает конца main, и поэтому она выполняется и завершается.
То, как вы хотите предотвратить его выход, зависит от того, что вы пытаетесь сделать, но одним из способов будет ManualResetEvent:
var mre = new System.Threading.ManualResetEvent (false);
mre.WaitOne ();
Конечно, теперь у вас может быть противоположная проблема, ваше приложение не может завершиться.