为什么不能这样写呢?

zhanglong_longlong 2013-04-11 01:30:04
 protected void Button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(() =>
{
aa();
}
)).Start();

Response.Write("bb");
}

public void aa()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
Response.Write("aa");

}
}



为什么执行不到aa()方法呢

直接提示
...全文
238 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ktei2008 2013-04-12
  • 打赏
  • 举报
回复
This is so obvious. Your aa() is wrapped in another thread, so when it runs, it may run before or after your last Response.write. This last Response.write will just push a new HTML document back to user as the response for his request. Web development is far different from desktop development, so make sure you understand the differences.
holiwood 2013-04-11
  • 打赏
  • 举报
回复
学习了,谢谢!
md5e 2013-04-11
  • 打赏
  • 举报
回复
Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); Thread.Sleep(1); Response.Write("cc"); t1.Join(); public void aa() { for (int i = 0; i < 10; i++) { Response.Write("aa"); Thread.Sleep(1); } } 这样就明显了
md5e 2013-04-11
  • 打赏
  • 举报
回复

    public void aa()
    {
        for (int i = 0; i < 10; i++)
        {
            Response.Write("aa");
            Thread.Sleep(1);
        }
    }
先输出,再等待
tcmakebest 2013-04-11
  • 打赏
  • 举报
回复
网页里面根本没必要使用线程,直接 aa();
md5e 2013-04-11
  • 打赏
  • 举报
回复
引用 10 楼 zhanglong_longlong 的回复:
引用 9 楼 liuchaolin 的回复: 缺少等待aa进程,b/s和c/s还是有所区别的 t1.Join(); 引用 8 楼 zhanglong_longlong 的回复:引用 6 楼 liuchaolin 的回复: Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); ……
不是不能用,是我刷新几次见没有什么变化,所以故意去掉的,这样就可以看到bb有时在前边,有时在后边,效果就很显示了
Ho_Johnson 2013-04-11
  • 打赏
  • 举报
回复
aa()方法是子线程 没有 阻塞 主线程 Button1_Click 方法 所以没有同步输出
zhanglong_longlong 2013-04-11
  • 打赏
  • 举报
回复
引用 9 楼 liuchaolin 的回复:
缺少等待aa进程,b/s和c/s还是有所区别的 t1.Join(); 引用 8 楼 zhanglong_longlong 的回复:引用 6 楼 liuchaolin 的回复: Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); t1.……
是不是就不能用 Thread.Sleep(1000);这个了?
md5e 2013-04-11
  • 打赏
  • 举报
回复
缺少等待aa进程,b/s和c/s还是有所区别的 t1.Join();
引用 8 楼 zhanglong_longlong 的回复:
引用 6 楼 liuchaolin 的回复: Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); t1.Join(); public void aa() { for (int i = 0; i < 10; i++) ……
zhanglong_longlong 2013-04-11
  • 打赏
  • 举报
回复
引用 6 楼 liuchaolin 的回复:
Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); t1.Join(); public void aa() { for (int i = 0; i < 10; i++) ……
请问我那样写有什么不对吗
seominho 2013-04-11
  • 打赏
  • 举报
回复
我觉得是 当 Button1_Click这个结束以后不能再 aa()里再调用Response.Write前台写数据了 Response.Write("bb");前加Thread.Sleep(1000); 能运行一些aa()
md5e 2013-04-11
  • 打赏
  • 举报
回复
Thread t1 = new Thread(aa); t1.Start(); Response.Write("bb"); t1.Join(); public void aa() { for (int i = 0; i < 10; i++) { Response.Write("aa"); } } 这样
  • 打赏
  • 举报
回复
现在的.net怎么越来越像js了,晕。 看到多线程头大了。帮顶
zhanglong_longlong 2013-04-11
  • 打赏
  • 举报
回复
帮忙解释下,谢谢
raaaazer 2013-04-11
  • 打赏
  • 举报
回复
唯一能想到的就是你的asp.net项目 没有target .net framework 3.0
zhanglong_longlong 2013-04-11
  • 打赏
  • 举报
回复
在控制台程序里面是可以的
zhanglong_longlong 2013-04-11
  • 打赏
  • 举报
回复
在一般性应用程序里面这样写是可以的,为什么在web里面就不行呢?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧