2008-09-08 21 views
7

私はマルチスレッドの基本的なCS理解を持っていますが、アプリケーションの単純なタイマーを超えて何もする必要はありません。誰かが私にマルチスレッドアプリケーションを使って作業する方法を教えてくれる良いリソースを知っていますか?基本を説明し、さらに難しいものをいくつかポーズしていますか?私は理論的にスレッディングを理解していますが、ネットでは実際にはありません。

答えて

23

これはJoseph Albahariの素晴らしい無料リソースです。

  • BackgroundWorkerの制御
  • WaitHandles
  • コールバック関数
  • ポーリング一般的にあなたがしたいASyncResultオブジェクト

Threading in C#

5

.NETでスレッドを同期する4つの基本的な方法があります。そのリストの先頭から始めて作業してください。それは最初の見方を意味し、背景職人のコントロールが状況に適しているかどうかを確認します。しかし、それはかなりWindowsフォームを仮定し、あなたは1つの新しいスレッドを生成しているだけです。

次に、waithandlesを試してください。 Waithandlesは複数のスレッドを一緒に調整するのに適しています。それらをすべて蹴飛ばすことができ、それらのすべてが終了するのを待つか、特定の番号をアクティブにしておきたい場合は、終了するときにただ1つを待って次のものを産み出します。あるいは、あるスレッドがはるかに早く終了することを知っているかもしれません。それで、それが完了するのを待って、少し仕事をして、残りが完了するのを待つことができます。

Waithandlesは、たとえば、スレッドを1つ追加するだけで、完了するまでブロックしたくない場合は、少しのように思えるかもしれません。次に、コールバックを使用して、スレッドが完了するとすぐに指定した関数が呼び出されるようにすることができます。

最後に、何らかの理由で上記のいずれもうまくいかない場合にのみ、ポーリングに戻ることができます。通常(BackgoundWorker含む)リサイズイベントの結果として、作成した

  • OS:

    私は順序でも大体、.NETで新しいスレッドを取得するための5つの方法を考えることができます。

  • Obj.Begin ___()/ End ____()。特定のCLRクラスには、すでにこれらの非同期メソッドが定義されていますが、使用可能なときに使用することは明らかです。
  • ThreadPool.QueueUserWorkItem()。これを使用して、独自のスレッドを作成します。
  • Delegate.BeginInvoke()/ EndInvoke()。この方法で任意の方法をラップすることができます。
  • Thread.Start()。 することができますが、私は最近、何かを読んでいます(今、リンクがない)QueueUserWorkItemがうまくいかない場合、デリゲートメソッドがおそらく良いです。
1

一つは、書籍「C#でのスレッド」でありますマルチスレッドアプリケーションをプログラミングするために理解する必要があります。

関連する問題