C# CWorker類簡(jiǎn)介
學(xué)習(xí)ServiceBase繼承的類時(shí),經(jīng)常會(huì)遇到C# CWorker類問題,這里將介紹C# CWorker類問題的解決方法。
服務(wù)的基本結(jié)構(gòu)是從ServiceBase繼承的類。重要的方法包括 OnStart、OnStop、OnPause 和 OnContinue ,每一個(gè)替代方法都與一個(gè)服務(wù)控制操作直接對(duì)應(yīng)。OnStart 方法的目的是創(chuàng)建 CWorker對(duì)象,
而C# CWorker類又創(chuàng)建 CWorkerThread對(duì)象,然后在該對(duì)象中創(chuàng)建執(zhí)行服務(wù)工作的線程。
服務(wù)的運(yùn)行時(shí)配置(以及 CWorker和 CWorkerThread對(duì)象的屬性)是在基于 XML的配置文件中維護(hù)的。它的名稱與創(chuàng)建的 .exe 文件相同,但帶有一個(gè).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中引用了每一個(gè) CWorker對(duì)象,因此需要枚舉 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 對(duì)象上的相應(yīng)方法來執(zhí)行操作的。
C# CWorker類
C# CWorker類的主要功能是創(chuàng)建和管理 CWorkerThread對(duì)象。Start 、Stop、Pause 和 Continue 方法調(diào)用相應(yīng)的 CWorkerThread方法。實(shí)際的CWorkerThread 對(duì)象是在Start 方法中創(chuàng)建的。與使用 Hashtable管理輔
助對(duì)象引用的 Service類相似,CWorker 使用 ArrayList(簡(jiǎn)單的動(dòng)態(tài)數(shù)組)來維護(hù)線程對(duì)象的列表。
【編輯推薦】