当前位置: 代码迷 >> ASP.NET >> global.asax 多线程有关问题
  详细解决方案

global.asax 多线程有关问题

热度:1886   发布时间:2013-02-25 00:00:00.0
global.asax 多线程问题
C# code
protected void Application_Start(object sender, EventArgs e)        {            if (HttpRuntime.Cache["ScheduleTask"] == null)            {               //第一种办法                //System.Timers.Timer t = new System.Timers.Timer();                //t.Elapsed+=new System.Timers.ElapsedEventHandler(test);                //t.Interval = 1000;                //t.Enabled = true;                //GC.KeepAlive(t);               //第二种办法                System.Threading.Thread thread = new System.Threading.Thread(test);                thread.Start();                //HttpRuntime.Cache["ScheduleTask"] = st;            }        }        void test()        {            Log.writeLog("测试成功");        }


为什么执行之后

连接被重置
载入页面时到服务器的连接被重置。
  此站点暂时不可用或者太忙。请稍后重试。
  如果您无法载入任何页面,请检查您计算机的网络连接。
  如果您的计算机受到防火墙或代理服务器的保护,请确认 Firefox 被授权访问网页。

另外自定义类中的HttpContext也成了null,现在暂时去掉了这个
C# code
namespace xinchen.Shared.Tools{    public class UrlHelper    {        public static string Root = HttpContext.Current.Request.ApplicationPath;···············

但仍然不能访问
如果我不开始线程,就一切正常,HttpContext也有值

------解决方案--------------------------------------------------------
你的 HttpContext.Current 为什么有值?那是因为asp.net在使用线程来处理新来的请求时为当前线程设置了环境变量值嘛。而你在线程中又搞了别的线程去执行.....
  相关解决方案