C#でマルチスレッドを書く方法はいくつかありますが、個人的にお気に入りの方法が
delegateを使ったものです。
なぜならば
・引数を渡せる
・返り値を受け取れる
System.Threading.Threadでは、クラス変数を使った受け渡しになってしまうので・・・。
実際の例は
private delegate int AddFuncDelegate(int a, int b);
void main() {
AddFuncDelegate afd = addFunc;
IAsyncResult iar = afd.BeginInvoke(1, 2, null, null);
while(true) {
if(iar.IsCompleted) {
break;
}
System.Threading.Thread.Sleep(100);
System.Windows.Forms.Application.DoEvents();
}
int ret = afd.EndInvoke(iar);
Console.WriteLine("addFunc Return: {0}", ret );
}
private int addFunc(int a, int b) {
int ret = a + b;
System.Threading.Thread.Sleep(1000 * 10) // 10秒
return ret;
}
こんな感じになります。
以前は25スレッドまでの制限上、あまり使われることは無かったのですが
(http://d.hatena.ne.jp/akiramei/20060123/p1)
現在はこの問題が解決
(http://www.infoq.com/jp/news/2008/05/ThreadPool)
して、250スレッドまで管理できるので、気にしなくて大丈夫かと。
あなたも今日からマルチスレッドプログラミング!
コメントする