2011-06-27 30 views
0

私は現在の.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

問題はありませんか?何が効いていないのですか?それともパフォーマンスの問題ですか? –

+0

while条件が満たされても機能しなくても、データベースの変更を求め続けるとアプリケーションに伝えたい –

答えて

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を使用することができますが、あなたがそれを行うことを決定する前に、これらの上にお読みください。

+0

Freq> iはどうなるのですか?Wait()関数は正しく終了しますか?どのようにデータベースからのデータを連続的にプールするアプリケーションにどのように伝え、例えばあるプロパティが0の値を持っていればdoWork! –

+0

@Angel、私の新しい答えをチェックしてください。 –