將當前請求的上下文作為參數傳遞給多線程的方
由于請求執行完畢后,多線程的程序可能還在運行,因此,在多線程的代碼中,是無法直接使用 HttpContext 對象的,但是,我們可以把它作為參數及傳遞到多線程的代碼中。實現這種功能,可以采用下面的兩種方法:
一,將 HttpContext 對象作為類的成員傳遞,下面是這種方法的完整實例代碼,直接拷貝即可執行:
ASPX 代碼
- <%@ Page Language="C#" %>
- "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <script runat=>
- public class ThreadWork
- {
- public System.Web.HttpContext ctx { set; get; }
- public ThreadWork() { }
- public void DoTest()
- {
- if (System.IO.File.Exists(HttpRuntime.AppDomainAppPath + "Log.txt"))
- {
- System.IO.File.Delete(HttpRuntime.AppDomainAppPath + "Log.txt");
- }
- for (int i = 0; i < 10; i++)
- {
- //將內容寫入到文件里以記錄測試的結果。
- using (System.IO.StreamWriter sw = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + "Log.txt", true))
- {
- sw.WriteLine("當前時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 得到的參數:" + ctx.Request.QueryString["id"]);
- sw.Flush();
- sw.Close();
- sw.Dispose();
- }
- System.Threading.Thread.Sleep(5000);
- }
- }
- }
- protected void Page_Load(object sender, EventArgs e)
- {
- ThreadWork tw = new ThreadWork();
- tw.ctx = System.Web.HttpContext.Current;
- System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(tw.DoTest));
- thread.Start();
- }
- </script>
- "http://www.w3.org/1999/xhtml">
- "server">
www.qqview.com - runat="server">
- av男人的天堂在线观看国产_好吊妞无缓冲视频观看_邻居老头把我弄舒服死了_我把她日出水了刺激视频
我們可以以這種方法進行訪問,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 代碼
- <%@ Page Language="C#" %>
- "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <script runat=>
- protected void Page_Load(object sender, EventArgs e)
- {
- System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(DoTest));
- thread.IsBackground = true;
- thread.Start(System.Web.HttpContext.Current);
- Response.Write("頁面請求完畢。");
- }
- private static void DoTest(Object context)
- {
- System.Web.HttpContext ctx = context as System.Web.HttpContext;
- if (System.IO.File.Exists(HttpRuntime.AppDomainAppPath + "Log.txt"))
- {
- System.IO.File.Delete(HttpRuntime.AppDomainAppPath + "Log.txt");
- }
- for (int i = 0; i < 10; i++)
- {
- //將內容寫入到文件里以記錄測試的結果。
- using (System.IO.StreamWriter sw = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + "Log.txt", true))
- {
- sw.WriteLine("當前時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 得到的參數:" + ctx.Request.QueryString["id"]);
- sw.Flush();
- sw.Close();
- sw.Dispose();
- }
- System.Threading.Thread.Sleep(5000);
- }
- }
- </script>
- "http://www.w3.org/1999/xhtml">
- "server">
- runat="server">
得到的結果與上面相同。