2010-11-28 12 views
2

私は特定の状態(ビジネスケース)を持っています。毎回それをチェックしてアクションを実行したいのです。この状況を処理するためのパッチを書いてください。毎回条件を確認する

私は、Webアプリケーション(asp.net)であるに働くアプリケーション..

私は、パッチの書き方を知らない,,とパッチが、この中に理想的なソリューションであるかどうかは知りません状態またはない...

してください任意の提案,,この問題の任意の詳細な説明は..

事前に感謝します。

答えて

3

このチェックはブラウザまたはサーバー側のアプリケーションから行われますか?

あなたがよりサーバーサイドコードからそれを実行したい場合は、あなたがスレッドでそれを行うことができ、JavaScriptのSee this Post

でそれを行うスレッドの睡眠を作ることができるよりも、クライアント(ブラウザ)から行われている場合あなたのオブジェクトの状態を確認するよりもいつ起きるのですか?

1

バックグラウンドで24時間年中無休で動作する小さなシンプルなサービスを作成することはどうでしょうか。私はその最も簡単な解決策だと思います。

+0

これはコメントです。 – Singleton

4

まず、このチェックを行うタイマーを設定するのは簡単です。タイマーを初期化し、

int _State; 
System.Timers.Timer stateCheckTimer = new System.Timers.Timer(); 
stateCheckTimer.Interval = 1000; // TODO - set to desired interval (in ms) 
stateCheckTimer.AutoReset = true; 
stateCheckTimer.Elapsed += stateCheckTimer_Elapsed; 

は、それからちょうど

void stateCheckTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    // Check for the desired state 
    if (_State == 1) 
    { 
    // Do something 
    } 
} 

stateCheckTimer_Elapsed機能で自分の状態を確認する最も困難なことは、_stateにアクセスするので、あなたはおそらく、タイマーを配置する必要がありますそれと同じ場所に(またはそれが通過した、何でも)。私はイベント駆動型のソリューションを提案します。その後

public EventHandler OnStateChanged; 

、状態を扱うクラスのパブリックイベントハンドラを作成し、あなたはそれの設定を制御するように(この例では、 _State)あなたの状態変数へのアクセスをカプセル化します。設定されている場合は、このイベントを起動します。私はあなただけ

OnStateChanged += StateChangeAction; 

、ご希望のアクションを実行するイベントハンドルを配線する必要があり、その機能にご希望のアクションを実行し、その後、プロパティを介して

public int State 
{ 
    get { return _State; } 
    set 
    { 
    _State = value; 
    if (OnStateChanged != null) 
    { 
     OnStateChanged(this, null); 
    } 
    } 
} 

これを行います

void StateChangeAction(object sender, EventArgs args) 
{ 
    // Check for the desired state 
    if (_State == 1) 
    { 
    // Do something 
    } 
} 

(EventArgs argsで状態を渡す必要がありますが、これはかなり簡単です)。このように、状態が変わるたびには、毎秒または分ごとに状態をポーリングするのではなく、それに応じて(電子メールを送信して、何でも)実行できるようになります。それはより少ないリソースを使用し、より反応性が高く(より速く)、そして最終的にはきれいなコードになります!あなたがこのようにすることができれば、私はそれを強く勧めます。

2

実行されるアクションはデータベースで実行されますか?データベースの一部の行を更新しますか?はいの場合は、この状況を処理するデータベースジョブを作成できます。

+0

ええ、ありがとう、私はこのソリューションでは、SQL Serverエージェントとこれは素晴らしいですが、これは大したですが、私はINFORMIXを使用して問題を私はこのエンジンでそれを行う方法を知らないと思います。 –

+2

この場合、C#コンソールアプリケーションを作成し、タスクスケジューラを使用してこのアプリケーションをスケジュールして、特定の時刻に実行することができます。 –

+0

ありがとうたくさんの説明をしてくださいタスクスケジューラを使ってそれを行う方法。単純な例があります。注:これはWebアプリケーションです.. –

関連する問題