欢迎光临
我们一直在努力

将当前请求的上下文作为参数传递给多线程的方

由于请求执行完毕后,多线程的程序可能还在运行,因此,在多线程的代码中,是无法直接使用 HttpContext 对象的,但是,我们可以把它作为参数及传递到多线程的代码中。实现这种功能,可以采用下面的两种方法:

一,将 HttpContext 对象作为类的成员传递,下面是这种方法的完整实例代码,直接拷贝即可执行:

ASPX 代码

  1. <%@ Page Language=“C#” %> 
  2. “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”
  3. <script runat=
  4.   public class ThreadWork 
  5.   { 
  6.     public System.Web.HttpContext ctx { setget; } 
  7.     public ThreadWork() { } 
  8.     public void DoTest() 
  9.     { 
  10.       if (System.IO.File.Exists(HttpRuntime.AppDomainAppPath + “Log.txt”)) 
  11.       { 
  12.         System.IO.File.Delete(HttpRuntime.AppDomainAppPath + “Log.txt”); 
  13.       } 
  14.        for (int i = 0; i < 10; i++) 
  15.       { 
  16.         //将内容写入到文件里以记录测试的结果。 
  17.         using (System.IO.StreamWriter sw = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + “Log.txt”true)) 
  18.         { 
  19.           sw.WriteLine(“当前时间:” + DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”) + ” 得到的参数:” + ctx.Request.QueryString[“id”]); 
  20.           sw.Flush(); 
  21.           sw.Close(); 
  22.           sw.Dispose(); 
  23.         } 
  24.         System.Threading.Thread.Sleep(5000); 
  25.       } 
  26.     } 
  27.   } 
  28.  
  29.   protected void Page_Load(object sender, EventArgs e) 
  30.   { 
  31.     ThreadWork tw = new ThreadWork(); 
  32.     tw.ctx = System.Web.HttpContext.Current; 
  33.     System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(tw.DoTest)); 
  34.     thread.Start(); 
  35.   } 
  36. </script> 
  37. “http://www.w3.org/1999/xhtml”
  38. “server”
  39.   www.qqview.com 
  40.  
  41.  
  42.   “form1” runat=“server”>

     

  43.  
  44.  

我们可以以这种方法进行访问,http://localhost:11249/WebSite1/ThreadTest.aspx?id=mengxianhui

得到的结果如下:
Txt 代码
当前时间:2011-02-11 20:11:07 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:12 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:17 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:22 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:27 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:32 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:37 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:42 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:47 得到的参数:mengxianhui
当前时间:2011-02-11 20:11:52 得到的参数:mengxianhui

二,采用 ParameterizedThreadStart 类实现,完整源代码如下:

ASpX 代码

  1. <%@ Page Language=“C#” %> 
  2. “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”
  3. <script runat=
  4.   protected void Page_Load(object sender, EventArgs e) 
  5.   { 
  6.     System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(DoTest)); 
  7.     thread.IsBackground = true
  8.     thread.Start(System.Web.HttpContext.Current); 
  9.     Response.Write(“页面请求完毕。”); 
  10.   } 
  11.  
  12.   private static void DoTest(Object context) 
  13.   { 
  14.     System.Web.HttpContext ctx = context as System.Web.HttpContext; 
  15.     if (System.IO.File.Exists(HttpRuntime.AppDomainAppPath + “Log.txt”)) 
  16.     { 
  17.       System.IO.File.Delete(HttpRuntime.AppDomainAppPath + “Log.txt”); 
  18.     } 
  19.     
  20.     for (int i = 0; i < 10; i++) 
  21.     { 
  22.       //将内容写入到文件里以记录测试的结果。 
  23.       using (System.IO.StreamWriter sw = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + “Log.txt”true)) 
  24.       { 
  25.         sw.WriteLine(“当前时间:” + DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”) + ” 得到的参数:” + ctx.Request.QueryString[“id”]); 
  26.         sw.Flush(); 
  27.         sw.Close(); 
  28.         sw.Dispose(); 
  29.       } 
  30.       System.Threading.Thread.Sleep(5000); 
  31.     } 
  32.   } 
  33. </script> 
  34.  
  35. “http://www.w3.org/1999/xhtml”
  36. “server”
  37.  
  38.  
  39.  
  40.   “form1” runat=“server”>

     

  41.  
  42.  

得到的结果与上面相同。

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:英协网 » 将当前请求的上下文作为参数传递给多线程的方

分享到: 生成海报
avatar

热门文章

  • 评论 抢沙发

    • QQ号
    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活