怎么会在web里用到线程,例如1个aspx页面请求,Page_Unload后就结束响应了

解决方案 »

  1.   

    我在web里面开过一个线程,没发现问题。lz的代码看起来好像没什么问题,但是也没什么作用,最后都join了,全部结束后才返回个客户端。回头我试一试。
      

  2.   

    试了下,没有问题啊,点击两次,结果是:----------------------------------------
    Timestamp: 23/12/2014 10:21:32 PMMessage: 192.168.1.101数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:32 PMMessage: 192.168.1.103数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:32 PMMessage: 192.168.1.100数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:32 PMMessage: 192.168.1.104数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:32 PMMessage: 192.168.1.102数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:56 PMMessage: 192.168.1.100数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:56 PMMessage: 192.168.1.101数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:56 PMMessage: 192.168.1.102数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:56 PMMessage: 192.168.1.103数据下载----------------------------------------
    ----------------------------------------
    Timestamp: 23/12/2014 10:21:56 PMMessage: 192.168.1.104数据下载----------------------------------------
      

  3.   

    代码和你基本也一样,只是用Enterprice library 做的log,是不是你写log函数里有什么问题,不是线程安全的?
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
    using Microsoft.Practices.EnterpriseLibrary.Logging;namespace WebApplication2
    {
        public partial class WebForm3 : System.Web.UI.Page
        {
            LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
            protected void Page_Load(object sender, EventArgs e)
            {        }        protected void Button1_Click(object sender, EventArgs e)
            {
                workthread();
            }        public void workthread()
            {
                try
                {
                    Thread categoryThread100 = new Thread(new ThreadStart(download100));
                    Thread categoryThread101 = new Thread(new ThreadStart(download101));
                    Thread categoryThread102 = new Thread(new ThreadStart(download102));
                    Thread categoryThread103 = new Thread(new ThreadStart(download103));
                    Thread categoryThread104 = new Thread(new ThreadStart(download104));
                    try
                    {
                        categoryThread100.Start();
                    }
                    catch (Exception ex)
                    {                    logWriter.Write(ex.ToString(), "Test");
                    }
                    try
                    {
                        categoryThread101.Start();
                    }
                    catch (Exception ex)
                    {                    logWriter.Write(ex.ToString(), "Test");
                    }
                    try
                    {
                        categoryThread102.Start();
                    }
                    catch (Exception ex)
                    {                    logWriter.Write(ex.ToString(), "Test");
                    }                try
                    {
                        categoryThread103.Start();
                    }
                    catch (Exception ex)
                    {                    logWriter.Write(ex.ToString(), "Test");
                    }
                    try
                    {
                        categoryThread104.Start();
                    }
                    catch (Exception ex)
                    {                    logWriter.Write(ex.ToString(), "Test");
                    }
                    categoryThread100.Join();
                    categoryThread101.Join();
                    categoryThread102.Join();
                    categoryThread103.Join();
                    categoryThread104.Join();
                }
                catch (Exception ex)
                {
                    Response.Write(ex);
                }        }        public void download100()
            {
                logWriter.Write("192.168.1.100数据下载", "Test");
            }
            public void download101()
            {            logWriter.Write("192.168.1.101数据下载", "Test");        }        public void download102()
            {            logWriter.Write("192.168.1.102数据下载", "Test");        }        public void download103()
            {            logWriter.Write("192.168.1.103数据下载", "Test");
            }
            public void download104()
            {            logWriter.Write("192.168.1.104数据下载", "Test");        }
        }
    }
      

  4.   

    先指出1#的问题啊。不是pageload处理完了就结束请求了,在此之后还有好几个管道事件要处理的。楼主可以在每个start()方法后面加上sleep,让每个线程启动后睡上100毫秒,看看能不能看到你预期的效果,Start()方法仅仅是把该线程加到了cpu的可执行任务队列中去了,并没有立即执行,何时执行要看cpu的调度。
      

  5.   

    楼主把try catch 去掉试试