学习ServiceBase继承的类时,经常会遇到C# CWorker类问题,这里将介绍C# CWorker类问题的解决方法。
服务的基本结构是从ServiceBase继承的类。重要的方法包括 OnStart、OnStop、OnPause 和 OnContinue ,每一个替代方法都与一个服务控制操作直接对应。OnStart 方法的目的是创建 CWorker对象,
而C# CWorker类又创建 CWorkerThread对象,然后在该对象中创建执行服务工作的线程。
服务的运行时配置(以及 CWorker和 CWorkerThread对象的属性)是在基于 XML的配置文件中维护的。它的名称与创建的 .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类都有相应的服务控制方法,根据服务控制操作进行调用。由于 Hashtable中引用了每一个 CWorker对象,因此需要枚举 Hashtable的内容,以调用适当的服务控制方法: foreach (CWorker cWorker in htWorkers.Values) cWorker.Start();
类似地,实现的 OnPause、OnContinue和 OnStop 方法是通过调用CWorker 对象上的相应方法来执行操作的。
C# CWorker类
C# CWorker类的主要功能是创建和管理 CWorkerThread对象。Start 、Stop、Pause 和 Continue 方法调用相应的 CWorkerThread方法。实际的CWorkerThread 对象是在Start 方法中创建的。与使用 Hashtable管理辅
助对象引用的 Service类相似,CWorker 使用 ArrayList(简单的动态数组)来维护线程对象的列表。
【编辑推荐】