我需要什麼代表和線程?C#代表和線程!
C#代表和線程!
回答
代表充當邏輯(但安全),相當於函數指針;他們允許您以抽象的方式談論操作。這個典型的例子是事件,但我會用更多的「函數編程」的例子:在列表中搜索:
List<Person> people = ...
Person fred = people.Find(x => x.Name == "Fred");
Console.WriteLine(fred.Id);
的「拉姆達」在這裏本質上是一種委託的實例 - 一個委託類型Predicate<Person>
- 即「給予一個人,是真實的還是錯誤的」。使用代表允許非常靈活的代碼 - 即List<T>.Find
方法可以根據呼叫者通過的委託來找到各種事情。
以這種方式,它們在很大程度上的作用類似於1方法接口 - 但更爲簡潔。
代表用於動態地向事件添加方法。
線程在進程內運行,並允許您一次運行共享資源的2個或更多任務。
代表們做的比這多很多...... – 2009-01-21 23:15:48
我建議您搜索這些條款,那裏有很多信息。他們是非常基本的概念,維基是一個高層次的起點:
http://en.wikipedia.org/wiki/Thread_(computer_science)
http://en.wikipedia.org/wiki/C_Sharp_(programming_language)
具體的例子總是幫助我,所以這裏是一個線程。考慮你的網絡服務器。當請求到達服務器時,它們被髮送到Web服務器進程進行處理。它可能會處理每個到達,完全處理請求和生成頁面之前,轉向下一個。但是請考慮在硬盤驅動器速度(而不是CPU速度)下進行多少處理,因爲在完成響應之前請求的頁面從磁盤中提取(或從數據庫中提取數據)。
通過從線程池中提取線程併爲每個請求提供自己的線程,我們可以在磁盤返回第一個數據之前處理數百個請求的非磁盤需求。這將允許一定程度的虛擬並行性,可以顯着提高性能。請記住,Web Server的性能還有很多,但這應該給你一個關於線程如何有用的具體模型。
你的問題是含糊不清......
但你可能只是想知道如何使用它們,以便有一個窗口,一個耗時的過程運行和進度條...
因此,創建一個線程來完成耗時的過程,並使用委託來增加進度條! :)
它們用於高級語言有用的相同原因。你不需要他們做任何事情,因爲他們真的只是對真正發生的事情的抽象。他們的確讓事情變得更容易,更快速地編程或理解。
Marc Gravell爲'代表什麼是代表'提供了一個很好的答案。
安德魯·特羅爾森定義了一個線程作爲
...的過程中的執行路徑。 「Pro C#2008和.NET 3.5平臺」,Aress。
在您的系統上運行的所有進程都至少有一個線程。我們稱之爲主線程。您可以根據各種原因創建其他線程,但是說明線程目的的最明顯的例子是打印。假設你打開你最喜歡的文字處理應用程序(WPA),輸入幾行,然後打印這些行。如果您的WPA使用主線程來打印文檔,WPA的用戶界面將被「凍結」,直到打印完成。這是因爲主線程必須打印的線條,纔可以處理任何用戶界面事件,即按鈕點擊,鼠標移動等,這是因爲如果代碼是這樣寫的:
do
{
ProcessUserInterfaceEvents();
PrintDocument();
} while (true);
顯然,這不是用戶想要的。用戶希望用戶界面在文檔正在打印時具有響應性。
答案當然是在第二個線程中打印行。通過這種方式,用戶界面可以專注於處理用戶界面事件,而輔助線程專注於打印線條。
錯覺是兩項任務同時發生。在單處理器機器上,這不可能是真實的,因爲處理器一次只能執行一個線程。但是,線程之間的切換髮生得如此之快以至於通常會保持錯覺。在多處理器(或多核)機器上,這可能是字面上真實的,因爲主線程可以在一個處理器上運行,而輔助線程在另一個處理器上運行。
在.NET中,線程是一件輕而易舉的事情。您可以使用System.Threading.ThreadPool類,使用異步委託或創建自己的System.Threading.Thread對象。
如果你是新來的線程,我會拋出兩個警告。
首先,如果您選擇錯誤的線程模型,實際上可能會損害應用程序的性能。要小心避免使用太多的線程或試圖線索那些應該真正發生的事情。
二(更重要的),要知道,如果你線程之間共享數據,你可能會需要sychronize訪問共享數據,例如,使用C#lock關鍵字。有豐富的關於這一主題在網上提供的信息,所以我就不在這裏重複了。要知道,你可以遇到間歇性的,並不-總是重複的錯誤,如果你不這樣做仔細。
- 1. C#多線程代理和事件
- 2. C++多線程 - 線程安全代碼
- 3. 瞭解多線程,代表和靜態
- 4. C++ 98和線程
- 5. Objective C和線程
- 6. C++ /類和線程
- 7. Winform和線程(C#)
- 8. C#和線程池
- 9. C#線程和this.Invalidate()
- 10. Erlang和C/C++線程
- 11. C#和代表
- 12. C#:線程和多線程的概念
- 13. c,創建線程和線程函數
- 14. 多線程COMObject和UI線程(C#)
- 15. GCD和代理線程?
- 16. C# - 代表和BackgroundWorkers
- 17. C#:代表和dynamicInvoke
- 18. 代表在C#和C++
- 19. 多線程用C鏈表++
- 20. 線程列表框C#SharpDevelop
- 21. 在C++ 11中,「不代表執行線程」的線程有什麼意義?
- 22. C#中的線程和TcpListener#
- 23. C#和多線程邏輯
- 24. C#和Awesomium - 多線程
- 25. C++虛函數和線程
- 26. C#事件和線程
- 27. C#線程和同步
- 28. 插座和線程用C
- 29. 副packaged_task和線程在C++
- 30. C++對象和線程
功課?這是一個非常基本的問題 – johnc 2009-01-21 23:13:11
即使它可能是基本的,它仍然是一個合法的問題。 – 2009-01-21 23:48:56