protected void Page_Load(object sender, EventArgs e)
    {
        run();
    }
    private void run()
    {
        //System.Threading.Thread.Sleep(5000);
        System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(work));
        th.Start();
    }
    private void work()
    {
        DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionString, CommandType.Text, "select top 1 * from pro_info", null);
        Response.Write(ds.Tables[0].Rows[0]["i_title"]);    }
代码如上,线程work方法里操作dataset sqldatareader数据集不行吗?我测试只出输出一段字符串是可以的
还有多线程是指再创建一个System.Threading.Thread th2不?

解决方案 »

  1.   

    你这就是多线程。work()方法执行完了,你只让work执行一遍,所以只输出了一段。
      

  2.   

    调用work()后,顺序执行里面的代码,执行完了就退出了你创建的这个线程。
      

  3.   

    如果想让它多次执行,可以加个while,如下所示:private void work() 
        { 
    while(执行标识)
    {
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionString, CommandType.Text, "select top 1 * from pro_info", null); 
            Response.Write(ds.Tables[0].Rows[0]["i_title"]); 
    }
        } 
      

  4.   

    可能我没说明白
    我上面执行的会出错,我测试了下面是可以
        private void work()
        {
            Response.Write("test");
        }
      

  5.   

    错误信息
    未处理的“System.Web.HttpException”类型的异常出现在 System.Web.dll 中。其他信息: 响应在此上下文中不可用。
      

  6.   

    不能直接这样写:
    Response.Write(ds.Tables[0].Rows[0]["i_title"]); 看了这段代码,貌似没有必要使用多线程吧。
    直接在Page_Load()中写:if (!IsPostBack)
    {
    DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionString, CommandType.Text, "select top 1 * from pro_info", null); 
            Response.Write(ds.Tables[0].Rows[0]["i_title"]); 
    }
      

  7.   

    SqlHelper.ExecuteNonQuery()执行添加语句倒是可以
    难道就不能返回dataset之类的数据集
      

  8.   

    是这个:
    Response.Write(ds.Tables[0].Rows[0]["i_title"]); Response对象找不到上下文
      

  9.   

    之前就有测试
      private void work()
        {
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionString, CommandType.Text, "select top 1 * from pro_info", null);//省略就没问题
            //Response.Write(ds.Tables[0].Rows[0]["i_title"]);
            Response.Write("test");
        }
    错误提示还跟上面一样,所以我才说执行SqlHelper.ExecuteDataSet()和执行SqlHelper.ExecuteDataReder有不行?
    你们在线程里都没问题吗?晚点我新建个测试下,不用SqlHelper操作类
      

  10.   


    这段代码不也使用了Response对象吗?
    Response对象找不到上下文
      

  11.   

    把Response.Write()注释掉测试一下看看
      

  12.   

    这样做是不行的。
    你的主线程是aspx处理线程,在此线程中你启用了一个新线程。主线程不会等待新线程执行完毕就会返回,也就是返回结果到浏览器。这个时候http上下文就不存在了,而新线程可能还在执行,这个时候如果用到http上下文就会报错。
    B/S中使用线程需要非常小心,要确保线程能正确结束。由于HTTP是无状态的协议,因此客户端也不会收到任何通知。如果你需要在服务器端执行较长的操作,可以优先考虑“异步 HTTP 处理程序”,更多信息参考MSDN。