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不?
{
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"]);
}
}
我上面执行的会出错,我测试了下面是可以
private void work()
{
Response.Write("test");
}
未处理的“System.Web.HttpException”类型的异常出现在 System.Web.dll 中。其他信息: 响应在此上下文中不可用。
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"]);
}
难道就不能返回dataset之类的数据集
Response.Write(ds.Tables[0].Rows[0]["i_title"]); Response对象找不到上下文
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操作类
这段代码不也使用了Response对象吗?
Response对象找不到上下文
你的主线程是aspx处理线程,在此线程中你启用了一个新线程。主线程不会等待新线程执行完毕就会返回,也就是返回结果到浏览器。这个时候http上下文就不存在了,而新线程可能还在执行,这个时候如果用到http上下文就会报错。
B/S中使用线程需要非常小心,要确保线程能正确结束。由于HTTP是无状态的协议,因此客户端也不会收到任何通知。如果你需要在服务器端执行较长的操作,可以优先考虑“异步 HTTP 处理程序”,更多信息参考MSDN。