windows service 调度控制
时间:2011-03-06 来源:醉,只为你
1 List<MyTimer> list = null;
2 string[] assmebles = { "Demo.Class1,Class1", "Demo.Class2,Class2" };
3
4 public Service1()
5 {
6 InitializeComponent();
7
8 Init();
9 }
10
11 /// <summary>
12 /// 根据注册的类库,来初始化相应的timer
13 /// </summary>
14 private void Init()
15 {
16 list = new List<MyTimer>();
17 MyTimer timer = null;
18
19 foreach (var item in assmebles)
20 {
21 timer = new MyTimer()
22 {
23 Enabled = false,
24 AutoReset = true,
25 Interval = 1000,
26 };
27 timer.Paramas = item;
28 timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
29 this.list.Add(timer);
30 }
31 }
32
33 /// <summary>
34 /// 功能实现
35 /// </summary>
36 /// <param name="sender"></param>
37 /// <param name="e"></param>
38 void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
39 {
40 try
41 {
42 InterFace.IWindowsService i = null;
43 MyTimer timer = sender as MyTimer;
44 i = Activator.CreateInstance(System.Type.GetType(timer.Paramas)) as InterFace.IWindowsService;
45 if (null == i)
46 {
47 WriteLog("找不到类型" + timer.Paramas);
48 return;
49 }
50 if (i.Interval > 0)
51 timer.Interval = i.Interval;
52 i.Exe();
53 }
54 catch (Exception ex)
55 {
56 WriteLog(ex.Message);
57 }
58 }
以上代码就完成了根据注册的类库信息,初始化了相应的Timer。在实际应用中assmebles 中的信息会保存在数据库中,在以后需要再编写服务来完成时,只需继承InterFace.IWindowsService 接口编写代码即可,这个调度中心会自动调用 子类中的 Exe()方法。
下面是接口代码 在服务开始、停止的控制
/// <summary>
/// 日志
/// </summary>
/// <param name="log"></param>
private void WriteLog(string log)
{
FileStream fs = new FileStream("c:\\test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine(DateTime.Now.ToString() + "-----" + log);
sw.Flush();
fs.Close();
}
protected override void OnStart(string[] args)
{
WriteLog("服务启动");
//服务启动
foreach (var item in list)
{
item.Enabled = true;
item.Start();
}
}
protected override void OnStop()
{
foreach (var item in list)
{
item.Enabled = false;
item.Stop();
}
WriteLog("服务停止");
}
}
public class MyTimer : System.Timers.Timer
{
public string Paramas { get; set; }
}
namespace InterFace
{
public interface IWindowsService
{
void Exe();
double Interval { get; set; }
}
} /Files/liuyuedeyv/ServiceFactory.rar
相关阅读 更多 +