2008-09-08 25 views
7

我對多線程有一個基本的cs-major理解,但除了應用程序中的簡單定時器之外,從未做過任何事情。有沒有人知道一個好的資源,可以讓我參觀如何使用多線程應用程序,解釋基礎知識,也許會帶來一些更難的東西?我理解線程的理論,但不是在實踐中.net

回答

5

有4種基本方式的.Net同步線程:

  • BackgroundWorker的控制
  • WaitHandles
  • 回調函數
  • 輪詢的ASyncResult對象

通常你想從列表頂部開始並逐漸減少。這意味着首先看看後臺工作人員是否適合這種情況。但是,它幾乎假定了Windows窗體,並且只是產生一個新線程。

接下來嘗試waithandles。等待手柄適用於協調多個線程。你可以把它們全部踢出去並等待它們全部結束,或者如果你想保持一定數量的活動,你只需等待一個,並在結束時產生下一個。或者也許你知道一個線程會更快完成,所以你可以等待它完成,做一些工作,然後等待其餘的完成。

等待處理可能看起來有點多,例如,如果你只是產生一個額外的線程,並且你不想阻塞,直到它完成。然後您可以使用回調函數,以便在線程完成後立即調用您指定的函數。

最後,當且僅當由於某種原因,以上都不會起作用,您可以退回到投票。

我能想到的5點不同的方式,以獲得一個新的線程在.NET中,也大致是:創建

  • OS,通常作爲的WinForms事件(包括BackgoundWorker)的結果。
  • Obj.Begin ___()/ End ____()。某些CLR類已經爲您定義了這些異步方法,顯然您希望在它們可用時使用它們。
  • ThreadPool.QueueUserWorkItem()。大部分時間使用這個來創建自己的線程。
  • Delegate.BeginInvoke()/ EndInvoke()。你可以用這種方法包裝任何方法。
  • Thread.Start()。你可能這樣做,但我最近讀了一些東西(現在沒有鏈接),如果QueueUserWorkItem不會工作的委託方法可能會更好。
1

一個我知道關於這個問題的最好的資源就是「C#線程」的書: http://www.albahari.com/threading/

我擁有所有.NET開發人員的一個很好的概述需要了解以編程多線程應用程序。