程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> Visual C#中使用線程

Visual C#中使用線程

編輯:C#基礎知識

  摘要:本文論述了各種模式的線程(單線程、單元線程和自由線程)以及每種模式的使用方法。同時,還提供了一個使用線程的 C# 語言代碼示例,以幫助您編寫使用線程的應用程序。本文還討論了多線程代碼中的一些重要問題。

  簡介

  編寫多線程 Microsoft® 消息隊列 (MSMQ) 觸發器應用程序向來是一件讓人畏懼的事情。不過,.NET 框架線程和消息類的出現使這項工作變得比以前容易了。這些類允許您使用任何適用於 .NET 框架的語言來編寫多線程應用程序。以前,像 Microsoft Visual Basic® 之類的工具對線程的支持十分有限。因此不得不使用 C++ 來編寫多線程代碼,通過 Visual Basic 構建由多個過程或 ActiveX DLL 組成的解決方案(這種解決方案一點也不理想),或者干脆完全放棄多線程。使用 .NET 框架,您可以構建各種多線程應用程序,而不用考慮選擇使用哪種語言。

  本文將逐步介紹構建偵聽並處理來自 Microsoft 消息隊列的多線程應用程序的過程。本文將著重討論兩個名稱空間 System.Threading 和 System.Messaging。示例代碼是用 C# 語言編寫的,但您可以輕松地將其轉換為您所使用的語言。

  線程背景

  在 Win32 環境中,線程有三種基本模式:單線程、單元線程和自由線程。

  單線程

  您最初編寫的某些應用程序很可能是單線程應用程序,僅包含與應用程序進程對應的線程。進程可以被定義為應用程序的實例,擁有該應用程序的內存空間。大多數 Windows 應用程序都是單線程的,即用一個線程完成所有工作。

  單元線程

  單元線程是一種稍微復雜的線程模式。標記用於單元線程的代碼可以在其自己的線程中執行,並限制在自己的單元中。線程可以被定義為進程所擁有的實體。處理時將調度該進程。在單元線程模式中,所有線程都在主應用程序內存中各自的子段范圍內運行。此模式允許多個代碼實例同時但獨立地運行。例如,在 .NET 之前,Visual Basic 僅限於創建單元線程組件和應用程序。

  自由線程

  自由線程是最復雜的線程模式。在自由線程模式中,多個線程可以同時調用相同的方法和組件。與單元線程不同,自由線程不會被限制在獨立的內存空間。當應用程序必須進行大量相似而又獨立的數學計算時,您可能需要使用自由線程。在這種情況下,您需要生成多個線程使用相同的代碼示例來執行計算。可能 C++ 開發人員是僅有的編寫過自由線程應用程序的應用程序開發人員,因為像 Visual Basic 6.0 這樣的語言幾乎不可能編寫自由線程應用程序。

  使用線程模式

  為了使您對線程模式有一定的概念,我們可以將其想象為從一所屋子搬到另一所屋子。如果您采用單線程方法,則需要您自己完成從打包到扛箱子再到拆包的所有工作。如果您使用單元線程模式,則表示您邀請了好朋友來幫忙。每個朋友在一個單獨的房間裡工作,並且不能幫助在其他房間工作的人。他們各自負責自己的空間和空間內的物品搬運。如果您采用自由線程方法,您仍然邀請相同的朋友來幫忙,但是所有朋友可以隨時在任何一個房間工作,共同打包物品。與此類似,您的房子就是運行所有線程的進程,每個朋友都是一個代碼實例,搬運的物品為應用程序的資源和變量。

  本示例解釋了不同線程模式的優點和缺點。單元線程比單線程要快,因為有多個組件實例在工作。在某些情況下,自由線程比單元線程更快更有效,這是因為所有事情同時發生,並且可以共享所有資源。但是,當多線程更改共享資源時,這可能會出現問題。假設一個人開始使用箱子打包廚房用具,此時另一個朋友進來了,要使用同一個箱子打包浴室的東西。第一個朋友在箱子上貼上了“廚房用具”,另一個朋友用“洗漱用品”標簽覆蓋了原標簽。結果,當您拆包時,就會發生將廚房用品搬到浴室的情況。

  示例應用程序

  第一步是要檢查示例應用程序的設計。應用程序將生成多個線程,每個線程都偵聽來自 MSMQ 隊列的消息。本示例使用兩個類,主 Form 類和自定義 MQListen 類。Form 類將處理用戶界面並創建,管理和破壞輔助線程。MQListen 類包含所有代碼,包括輔助線程運行所需的消息隊列因素。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved