[已解决问题] 一个关于ASP.NET中的多线程问题
提问时间: 2008-04-24 22:23
悬赏分:5 浏览:317 次

大家好,我在ASP.NET中用多线程时碰到了点问题:

我在页面中新建了一个线程(前台线程),但主线程仍然没有等我新建的线程执行结束后再结束,以下测试代码:

        protected void Page_Load(object sender, EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(CallThread));
            t.IsBackground = false;
            t.Start();
           
            Response.Write("Main Thread");
        }

        protected void CallThread()
        {
            for (int i = 0; i < 100; i++)
            {
                Response.Write("Sub Thread:" + i+"<br>");
                Thread.Sleep(1);
            }
        }

页面的最终输出是:
Sub Thread:0
Main Thread

而如果我把它放到终端应用程序下(只把输出语句改掉),那我就会得到以下结果:
Sub Thread:0
Main Thread
Sub Thread:1
...
Sub Thread:99

终端应用程序下的这个结果是我所期望的,但为什么在ASP.NET中却不一样呢?
请大家指点迷津!


提问者:水言木 - 菜鸟二级
最佳答案
额~这是asp.net~

~要理解webform的生命周期~

在第一次Sleep的时候~将继续主线程完成其他的事件~呈现~卸载~
2008/4/25 0:13:59 回答者:wsky


提问者对于答案的评价:OK, 两个字母:3Q
其它回答(3)
多线程问题,很是苦闷的问题啊
3个月前   回答者:JesseZhao - 菜鸟二级
会不会跟双核CUP有关?
3个月前   回答者:yeyang - 菜鸟二级
我觉的可以用WaitHandle来控制吧,用WaitHandle.WaitAll()来阻塞线程。

3个月前   回答者:荒芜 - 菜鸟二级
评论
3个月前   水言木 :
@wsky
你是指虽然现在看起来子线程并没有在输出了Main Thread后继续执行,但事实上主线程并没有结束,子线程也仍然执行,但是因为页面已被主线程卸载,所以我已经看不到结果了,是这样么?
3个月前   水言木 :
@yeyang
我是单核的
3个月前   wsky :
嗯 差不多是这个意思 了解下webform的编程模型就会更清楚
2个月前   天好蓝-崇崇 :
Response.Write已经让Page结束了,所以就没有再输出下面期望的结果了~~~
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除