我有一个特定的状态(商业案例),我想在每个时间段检查它,执行一个动作......他们告诉我写一个补丁来处理这种情况..
我工作的应用程序是一个Web应用程序(asp.net)..
我不知道如何编写补丁,我不知道补丁是否是这种状态下的理想解决方案..
请任何建议,任何有关此问题的详细解释..
提前感谢。
答案 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全天候工作的小型简单服务。我认为这是最简单的解决方案。