Tho*_*mas 4 c# vb.net multithreading windows-services timer
我无法弄清楚如何以最好的方式解决这个问题.
现在我有一个Windows服务,其唯一任务是从具有特定DSN的数据库中收集数据,然后在数据有效时发送电子邮件.该服务包含一个计时器,每5分钟计时一次,并执行上述任务.
现在我需要重新编写Windows服务才能在1个以上的DSN上运行.我想在windows服务中创建几个线程,然后在每个线程内再次有一个seperat计时器.这是一个好主意,如何做到这一点?我想避免为每个DSN提供Windows服务.
如果我没有任何意义,我会尝试绘制它
Windows Service
Run Code Online (Sandbox Code Playgroud)
线程1(DSN1)-----------------------------线程2(DSN2)------------- --------- Thread3(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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |