首页 新闻 会员 周边 捐助

一个关于ASP.NET中的多线程问题

0
悬赏园豆:5 [已解决问题] 解决于 2008-04-25 18:32
<P>大家好,我在ASP.NET中用多线程时碰到了点问题:</P> <P>我在页面中新建了一个线程(前台线程),但主线程仍然没有等我新建的线程执行结束后再结束,以下测试代码:</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread t = new Thread(new ThreadStart(CallThread));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.IsBackground = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Start();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("Main Thread");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void CallThread()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 100; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("Sub Thread:" + i+"&lt;br&gt;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.Sleep(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P> <P>页面的最终输出是:<BR>Sub Thread:0<BR>Main Thread</P> <P>而如果我把它放到终端应用程序下(只把输出语句改掉),那我就会得到以下结果:<BR>Sub Thread:0<BR>Main Thread<BR>Sub Thread:1<BR>...<BR>Sub Thread:99</P> <P>终端应用程序下的这个结果是我所期望的,但为什么在ASP.NET中却不一样呢?<BR>请大家指点迷津!</P>
水言木的主页 水言木 | 小虾三级 | 园豆:586
提问于:2008-04-24 22:23
< >
分享
最佳答案
0
额~这是asp.net~ ~要理解webform的生命周期~ 在第一次Sleep的时候~将继续主线程完成其他的事件~呈现~卸载~
wsky | 小虾三级 |园豆:558 | 2008-04-25 00:13
其他回答(3)
0
多线程问题,很是苦闷的问题啊
JesseZhao | 园豆:305 (菜鸟二级) | 2008-04-24 22:27
0
会不会跟双核CUP有关?
yeyang | 园豆:418 (菜鸟二级) | 2008-04-25 09:15
0
我觉的可以用WaitHandle来控制吧,用WaitHandle.WaitAll()来阻塞线程。
荒芜 | 园豆:335 (菜鸟二级) | 2008-04-25 17:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册