我不知道如何以最佳方式解决这个问题。
现在我有一个 Windows 服务,其唯一任务是从具有特定 DSN 的数据库收集数据,然后在数据有效时发送电子邮件。该服务包含一个计时器,每 5 分钟滴答一次并执行上述任务。
现在我需要重新编写Windows 服务以便能够在超过1 个DSN 上运行。
我正在考虑在 Windows 服务中创建多个线程,然后在每个线程中再有一个单独的计时器。
这是个好主意吗?如何做到这一点?我想避免为每个 DSN 提供一个 Windows 服务。
如果没有任何意义我会尝试画出来
Windows Service
线程1(DSN1)----------------------------线程2(DSN2)-------------- ---------线程3(DSN3)
计时器(每 X 分钟滴答一次)-----------------计时器(相同)--------------------- ---时间(相同)
逻辑()--------------------------------------------------------逻辑- - - - - - - - - - - - - - - - - 逻辑()
希望我的问题有意义:)
据我所知,每个计时器代表一个自己的线程。知道这一点后,我将尝试为每个给定的 dsn 动态创建计时器对象。
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
private List<GetDataFromDSN> list = null;
protected override void OnStart(string[] args)
{
list = new List<GetDataFromDSN>();
// assume args contains your given dsn values
foreach (string dsn in args)
{
GetDataFromDSN newObj = new GetDataFromDSN();
newObj.DSN = dsn;
list.Add(newObj);
newObj.Start();
}
}
}
public class GetDataFromDSN
{
public string DSN { get; set; }
private Timer timer = null;
private double interval = 1000*60*5; // 5 minutes interval
public GetDataFromDSN()
{
// init your object
timer = new Timer(interval);
timer.Elapsed +=new ElapsedEventHandler(timer_Elapsed);
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
// do what ever you want
}
public void Start() // or even make timer public
{
timer.Start();
}
public void Stop()
{
timer.Stop();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)