マルチスレッドプログラミング

重い処理をするので、ボタンを押したらバックグラウンドで処理をしてもらうとともに、ボタンのEnableをfalseにして、処理が終わったらボタンのEnableをtrueにするということをしたかった。


C#Javaとは違って、別スレッドにするだけでThreadを継承したりしなくてよくて、

(new Thread(new ThreadStart(メソッド名))).start();

だけで別スレッドにできるから幸せだなぁとか思ってた。

でもEnableを変えたり、立ち上げたスレッドが終わってるかを知りたいとなるとめんどくさいようだ。
コントロールを別スレッドから操作するとエラーが出るのでInvokeしてあげないといけなかったりとかいろいろめんどくさい。簡単にできないかと思って調べてみた。


とりあえずC#で使えるマルチスレッドの方法を調べた。
http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_01.html


で、今回やりたかったボタンを押してのバックグラウンド処理はBackgroundWorkerとかいうのでで簡単にできちゃうっぽい。
http://www.labasp.net/CsharpNote/mControl/BackgroundWorker/101_110.html

すげぇ。こんな至れり尽くせりなコントロールだと逆に無駄が多いんじゃないかと思って、使うの躊躇しちゃう。けどまぁせっかく調べたしこれ使ってみようと思う。