线程和数据库读取建议

时间:2011-06-27 21:21:50

标签: .net database thread-safety

我的当前.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();
        }
     }
}

但我需要一些关于线程和循环事件的概念的帮助,我想知道是否有人必须面对同样的问题以及如何解决它......

由于

1 个答案:

答案 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,但是你应该在决定这些之前阅读这些内容。