如何在另一个线程中访问HttpContext.Current

时间:2016-06-09 10:31:37

标签: c# asp.net multithreading timer

我创造了一个计时器。定时器调用后,我需要重定向到另一个页面。

请帮帮我。

我的代码:

System.Timers.Timer myTimerfortodolist;
void Application_Start(object sender, EventArgs e)
{

    myTimerfortodolist = new System.Timers.Timer();
    myTimerfortodolist.Interval = 60000;//86400000 milisecond is equal to 24;
    myTimerfortodolist.AutoReset = true;
    myTimerfortodolist.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_TODO);
    myTimerfortodolist.Enabled = true;

}


//create for check send Interval from Reminder Config within 5 minute
public void myTimer_TODO(object source, System.Timers.ElapsedEventArgs e)
{
        if (//Condition//)
        { 
          Response.Redirect("~/Authorize.aspx");
        }

}
  

在此背景下无法获得响应。

我从Page重定向到另一个,并且计时器每1分钟运行一次,所以我无法在委托方法中获取Current HttpContext

1 个答案:

答案 0 :(得分:1)

为什么你付出这么多努力......当你有一个简单的解决方案时......使用Thread.sleep()

void Application_Start(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(60000);//86400000 milisecond is equal to 24;
    Response.Redirect("~/Authorize.aspx");
}
  

编辑:响应将为null,因为httpcontext在那个时间为空。为什么?   因为当你创建和设置定时器时,处理它的线程在服务器中仍处于活动状态以处理你的代码...但是那时服务器已经处理了httprequestcontext并回复了..因此没有更多的请求和响应或会话可访问。 ..只有当服务器必须处理HttpRequest调用时才会创建它们......