我的当前.net应用程序存在问题,如下所示,当更新数据库行或插入新行时,我的.net服务必须读取这些更改并提交打印订单。
我实现了以下功能:
public void OnStart()
{
ThreadMgmt pthread = new ThreadMgmt();
pthread.printNotification += new pthread.DatabaseChanged();
pthread.frequency = 2000;
ThreadStart ts = new ThreadStart(pthread.Wait);
Thread t = new Thread(ts);
t.Start();
}
void ReadDataBase() {...}
void Printing(){...}
public class ThreadMgmt
{
public delegate void UpdateDelegate();
public event UpdateDelegate Notify;
private int frequency {set;get;}
public void Wait()
{
for (int i = 0; i <= Freq; i++)
{
Thread.Sleep(this.frequncy);
Notify();
}
}
}
但我需要一些关于线程和循环事件的概念的帮助,我想知道是否有人必须面对同样的问题以及如何解决它......
由于
答案 0 :(得分:1)
这是一个简单的解决方案。
private bool m_stop;
public void Stop ()
{
lock (this)
m_stop = true;
}
public void Wait()
{
for (int i = 0; i <= Freq; i++)
{
lock (this)
{
if (m_stop)
return;
}
Thread.Sleep(this.frequncy);
if (Notify != null)
Notify();
}
}
如果你想更快地关闭,你可以使用Monitor.Wait和Monitor.PulseAll,但是你应该在决定这些之前阅读这些内容。