每个时间段检查条件

时间:2010-11-28 07:28:59

标签: c# .net asp.net patch

我有一个特定的状态(商业案例),我想在每个时间段检查它,执行一个动作......他们告诉我写一个补丁来处理这种情况..

我工作的应用程序是一个Web应用程序(asp.net)..

我不知道如何编写补丁,我不知道补丁是否是这种状态下的理想解决方案..

请任何建议,任何有关此问题的详细解释..

提前感谢。

4 个答案:

答案 0 :(得分: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;

然后在stateCheckTimer_Elapsed函数中检查您的状态,

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

最困难的事情是访问_State,所以你可能不得不把计时器放在与它相同的位置(或者让它通过,无论什么工作)。我会建议一个事件驱动的解决方案。在类上创建一个处理状态的公共事件处理程序,

public EventHandler OnStateChanged;

然后,封装对状态变量的访问(在此示例中为_State),以便您控制它的设置。设置完成后,触发此事件。我是通过财产来做到的,

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

然后,您只需要连接一个事件句柄来执行您想要的操作,

OnStateChanged += StateChangeAction;

在该功能中执行您想要的操作,

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

(你必须通过EventArgs args传递状态,但这很简单)。这样,只要状态发生变化,您就会立即对其采取行动(发送电子邮件,做任何事情),而不是每隔x秒或几分钟轮询状态。它将使用更少的资源,更具反应性(更快),最终是更整洁的代码!如果你能够这样做,我强烈推荐它。

答案 1 :(得分:3)

此检查是从浏览器还是在服务器端应用程序上完成的?

如果是从客户端(浏览器)完成的,那么使用JavaScript See this Post

可以完成

如果你想从服务器端代码中执行此操作,可以使用线程执行此操作,使线程休眠一段时间以及何时唤醒,而不是检查对象的状态

答案 2 :(得分:2)

要执行的操作是数据库1,例如更新数据库中的某些行?如果是,您可以创建一个处理这种情况的数据库作业。

答案 3 :(得分:1)

如何编写一个24/7全天候工作的小型简单服务。我认为这是最简单的解决方案。