>これで1秒メインスレッドを停止させる。という事ですが
違います。

>しかし別のスレッドTではメインスレッドの変数を扱えない
変数はスレッドに属するものではありません。

>>170
>>167でいいでしょ。スレッド使いたいなら↓
var flag = false;
var flagLock = new object();

Task.Factory.StartNew(() => {
 Thread.Sleep(3000);
 lock( flagLock ) flag = true;
});

while( true ){ lock( flagLock ) if( flag ) break;}