マルチスレッド
とりあえず実験です。
C# のマルチスレッドは何種類か実現方法があるのですが、一番簡単なスレッドプールを使ってみます。
private static object lockObject = new Object(); private static void threadMethod(object o) { // 非同期で実行される部分 lock(lockObject) { // lock による排他処理 } } private void button1_Click(object sender, EventArgs e) { WaitCallback wcb = new WaitCallback(threadMethod); ThreadPool.QueueUserWorkItem(wcb); }
細かい動作の原理は良く分かりませんが、とりあえずこんな感じです。
んで、lock によって lockObject のロックを取得するのですが、これは lockObject へのアクセスを出来なくなるのでは無く、他のスレッドでロックが取得出来ないようにする為の仕組みです。結局人間が処理を把握しておかないと駄目なんですね。当たり前ですが、重要なポイントです。Delphi の Synchronized はメインスレッドで動作させる為の仕組みなので、この辺りの考え方が異なります。どっちが良いという話では全く無いですが。
でも、結構手軽に扱えますね〜。同期を取るのはそれなりに面倒ですが、別にクラスを作る必要が無いってのはポイント高いですね。