C# CWorker類簡介
學(xué)習(xí)ServiceBase繼承的類時,經(jīng)常會遇到C# CWorker類問題,這里將介紹C# CWorker類問題的解決方法。
服務(wù)的基本結(jié)構(gòu)是從ServiceBase繼承的類。重要的方法包括 OnStart、OnStop、OnPause 和 OnContinue ,每一個替代方法都與一個服務(wù)控制操作直接對應(yīng)。OnStart 方法的目的是創(chuàng)建 CWorker對象,
而C# CWorker類又創(chuàng)建 CWorkerThread對象,然后在該對象中創(chuàng)建執(zhí)行服務(wù)工作的線程。
服務(wù)的運(yùn)行時配置(以及 CWorker和 CWorkerThread對象的屬性)是在基于 XML的配置文件中維護(hù)的。它的名稱與創(chuàng)建的 .exe 文件相同,但帶有一個.cfg 后綴。配置示例如下:
- 〈?xml version="1.0"?〉
- 〈configuration〉
- 〈ProcessList〉
- 〈ProcessDefinition
- ProcessName="Worker1"
- ProcessDesc="Message Worker with 2 Threads"
- ProcessType="AppSpecific"
- ProcessThreads="2"
- InputQueue=".private$test_load1"
- ErrorQueue=".private$test_error"〉
- 〈OutputList〉
- 〈OutputDefinition OutputName=".private$test_out11" /〉
- 〈OutputDefinition OutputName=".private$test_out12" /〉
- 〈/OutputList〉
- 〈/ProcessDefinition〉
- 〈ProcessDefinition
- ProcessName="Worker2"
- ProcessDesc="Assembly Worker with 1 Thread"
- ProcessType="Assembly"
- ProcessThreads="1"
- InputQueue=".private$test_load2"
- ErrorQueue=".private$test_error"〉
- 〈OutputList〉
- 〈OutputDefinition OutputName="C:MSDNMessageServiceMessage
- Example.dll" /〉
- 〈OutputDefinition OutputName="MSDNMessageService.Message
- Sample.ExampleClass"/〉
- 〈/OutputList〉
- 〈/ProcessDefinition〉
- 〈/ProcessList〉
- 〈/configuration〉
CWorkerThread 和C# Cworker類都有相應(yīng)的服務(wù)控制方法,根據(jù)服務(wù)控制操作進(jìn)行調(diào)用。由于 Hashtable中引用了每一個 CWorker對象,因此需要枚舉 Hashtable的內(nèi)容,以調(diào)用適當(dāng)?shù)姆?wù)控制方法: foreach (CWorker cWorker in htWorkers.Values) cWorker.Start();
類似地,實(shí)現(xiàn)的 OnPause、OnContinue和 OnStop 方法是通過調(diào)用CWorker 對象上的相應(yīng)方法來執(zhí)行操作的。
C# CWorker類
C# CWorker類的主要功能是創(chuàng)建和管理 CWorkerThread對象。Start 、Stop、Pause 和 Continue 方法調(diào)用相應(yīng)的 CWorkerThread方法。實(shí)際的CWorkerThread 對象是在Start 方法中創(chuàng)建的。與使用 Hashtable管理輔
助對象引用的 Service類相似,CWorker 使用 ArrayList(簡單的動態(tài)數(shù)組)來維護(hù)線程對象的列表。
【編輯推薦】