マルチスレッド(非同期)処理に関しては色々なやり方があります。ThreadクラスやThreadPoolクラスを使用する方法や、デリゲートをBegininvokeする方法などがありましたが、.NET4以降ではTaskクラスを使用するのが手軽でおすすめです。
// .NET 4.5 以降 Task.Run(() => { // なにか重たい処理 for (int i = 0; i < int.MaxValue; i++) { } }); // .NET 4.0 の場合 Task.Factory.StartNew(() => { // なにか重たい処理 for (int i = 0; i < int.MaxValue; i++) { } });
別スレッドの処理が終了したのを待つ必要がある場合、Runメソッドの戻り値を利用します。
// 終わるまで待つ場合 Task t = Task.Run(() => { // なにか重たい処理 for (int i = 0; i < int.MaxValue; i++) { } }); // タスクが終了するまで待つ t.Wait();
別スレッドでハンドルされない例外が発生した場合、Waitメソッドでその例外キャッチすることができます。
// 別スレッドでハンドルされない例外があった場合 Task t = Task.Run(() => { throw new NotImplementedException(); }); try { // Waitで例外をキャッチできる t.Wait(); } catch (Exception ex) { Console.WriteLine(ex); }