我正在开发 ac# windows 窗体 GUI 监控应用程序,它读取数据库表并发送 MAIL 和 SMS 警报。因此,为了监视数据库并发送邮件和 SMS,我使用了几秒钟后调用的 c# Timer,一旦发送和发送邮件,GUI 列表框将通过执行异步功能的后台工作人员进行更新。
在异步函数中,我获取数据库值并分拆两个线程来发送邮件和短信。
但是如果需要这么长时间,定时器线程就会重叠并且异步函数会重叠。所以它会多次发送相同的邮件。如何解决?是因为 Timer 重叠而发生的吗?
t.Interval = cn.MtimeOut;
t.Enabled = true;
t.Tick += new System.EventHandler(OnTimerEvent);
OnTimerEvent 实现
private void OnTimerEvent(object sender, EventArgs e)
{
lock (_objLock)
{
this.startMonitor();
}
}
private void startMonitor()
{
MyList = new List<string>();
var bw = new BackgroundWorker();
bw.DoWork += (o, args) => asyncMonitor(); /* function which does sending
mail SMS and database reading*/
bw.RunWorkerCompleted += (o, args) => UpdateControl();//update list box
bw.RunWorkerAsync();
}
private void asyncMonitor()
{
/* READ DATABASE TABLES AND DO CALCULATIONS
WHICH TAKES CONSIDERABLE AMOUNT OF TIME */
// Thread for sending MAIL by execute MailLogEvent method
Thread trd = new Thread(MailLogEvent);
// Thread for sending SMS by execute SmsLogEvent method
Thread trd2 = new Thread(SmsLogEvent);
//parameters for above functions
trd2.Start(lg);
trd.Start(lg);
}
我什至对 Timer 事件和 SMS MAIL 发送方法都使用了锁,但它不同步。