我不知道如何以最好的方式处理这个问题。
现在我有一个 Windows 服务,它的唯一任务是从具有特定 DSN 的数据库中收集数据,然后在数据有效时发送电子邮件。该服务包含一个计时器,每 5 分钟计时一次并执行上述任务。
现在我需要重新编写 windows 服务才能在 1 个以上的 DSN 上运行。 我正在考虑在 Windows 服务中创建多个线程,然后在每个线程中再次有一个单独的计时器。 这是个好主意吗?如何实现?我想避免为每个 DSN 提供一个 Windows 服务。
如果我没有任何意义,我会尝试画出它
Windows Service
线程 1(DSN1)----------------------------线程 2(DSN2)------------ --------------线程3(DSN3)
定时器(每 X 分钟滴答一次)----------------定时器(相同)-------------------- ---定时器(相同)
Logic()--------------------------------------------逻辑- ------------------------------逻辑()
希望我的问题有意义:)
最佳答案
据我所知,每个计时器都代表一个独立的线程。知道这一点后,我会尝试为每个给定的 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();
}
}
关于c# - Windows 服务中的线程中的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396645/