日期:2014-05-17  浏览次数:20522 次

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在使用线程来处理新来的请求时为当前线程设置了环境变量值嘛。而你在线程中又搞了别的线程去执行.....