そもそもフォームもクラスですし、クラスにあるオブジェクトを別スレッドから操作は出来ません。フォーム自体がスレッドセーフではないから当然と言えば当然なんですが、非同期処理をやるとカウンタや進捗表示など、どうしてもフォームオブジェクトへアクセスしたくなる場面に出くわします。 ボタン1個、ラベル1個を用意したフォームアプリケーションを用意して下さい。 以下はやったらダメな例です。System.ThreadingをUsingして実行して下さい。 private void button1_Click(object sender, EventArgs e) { Thread testThread = new Thread(new ThreadStart(HeavyProc)); testThread.Start(); } private void HeavyProc() { for (int i =