asp.net多线程问题

ZAIJIANLUOYE110 2013-10-25 10:50:51

protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnStartThread_Click(object sender, EventArgs e) {
try {
Thread t1 = new Thread(new ThreadStart(CountAdd));
t1.Start();
//t1.Join();
}
catch (Exception ex) {
Response.Write(ex.Message);
}
}
public void CountAdd() {
Thread.Sleep(15000); //阻塞15s
txtFirstName.Text = (count++).ToString();
}



点击btnStartThread后启动了线程:
1、如果注释掉t1.Join(),则txtFirstName.Text = (count++).ToString();执行后,其Text属性不变;
2、如果不注释掉t1.Join(),则页面会卡住,等CountAdd执行完后,页面恢复正常,并且txtFirstName的 Text属性被赋值了。

如果要是页面既不卡住又要使txtFirstName成功赋值,该怎么做?是不是不用多线程也可以?
...全文
210 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
charles_y 2013-10-26
  • 打赏
  • 举报
回复
引用 9 楼 ZAIJIANLUOYE110 的回复:
引用 1 楼 abcmsnet 的回复:
一个网页也用多线程你资源真是富裕啊。不知道你的需求
这不是不知道怎么办吗,呵呵……有什么办法吗?
不是已经有人告诉你了吗? 使用异步调用,比如ajax
  • 打赏
  • 举报
回复
这就好比如说你去饭店点餐,可是你点的菜品当年已经没有了,需要第二年才能种出来,你现在关心人家种菜时用什么农具,这根本不能加快你的餐的上菜速度。 所谓“多线程”解决不了你的问题。应该使用富客户端的编程。如果你觉得javascript编写大型的客户端应用程序显得很垃圾、兼容性不好、缺乏控件积累和知识继承性,那么你可以选择silverlight来开发web应用。
  • 打赏
  • 举报
回复
你要从前端应用出发,结合asp.net的页面处理内部机制。绝不能从简单的一两行后台代码来瞎猜“解决方法”。 对于asp.net这种动不动就“刷新html”的请求来说,浏览器客户端连接等在那里、“白屏、死”在那里等着你的Page页面全都执行完必要的序列化html操作。如果你想让txtFirstName.Text也能在输出的html中出现,那么必定要阻塞整个html生成过程(也就是阻塞Page的Render方法执行)。 你敢随便说“阻塞15秒”? 我做页面,不敢阻塞3秒钟!否则这样的页面的用户体验就太差了。 #4楼的说法是对的。许多asp.net程序员明知道asp.net一遍遍刷新html多么慢,可是总也不去学习Ajax。
ZAIJIANLUOYE110 2013-10-26
  • 打赏
  • 举报
回复
引用 4 楼 abcmsnet 的回复:
单纯调用这个阻塞方法,可以用AJAX异步执行也可以啊
我刚开始试过这种方法是可行的,只是这样的函数太多,太麻烦了,大部分都是阻塞的,而且有的需要处理返回数据并显示……所以想看看多线程怎么解决呢
ZAIJIANLUOYE110 2013-10-26
  • 打赏
  • 举报
回复
引用 1 楼 abcmsnet 的回复:
一个网页也用多线程你资源真是富裕啊。不知道你的需求
这不是不知道怎么办吗,呵呵……有什么办法吗?
ZAIJIANLUOYE110 2013-10-26
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[quote=引用 楼主 ZAIJIANLUOYE110 的回复:] 如果要是页面既不卡住又要使txtFirstName成功赋值,该怎么做?
没有可能。 这里使用线程没有任何作用,反而更慢。[/quote] 确实感觉还不如不用呢……有什么解决办法吗?
  • 打赏
  • 举报
回复
引用 楼主 ZAIJIANLUOYE110 的回复:
如果要是页面既不卡住又要使txtFirstName成功赋值,该怎么做?
没有可能。 这里使用线程没有任何作用,反而更慢。
lc_ant 2013-10-25
  • 打赏
  • 举报
回复
好像可以用委托
tcmakebest 2013-10-25
  • 打赏
  • 举报
回复
每次打开一个网页,本身就是一个新的线程了,应该不需要再开线程来运行。
  • 打赏
  • 举报
回复
单纯调用这个阻塞方法,可以用AJAX异步执行也可以啊
  • 打赏
  • 举报
回复
你要阻塞然后又不让当前页面卡住,那你可以在这个页面用iframe悄悄的嵌入一个含这个阻塞的页面,这样客户感觉不到阻塞,而且你的阻塞方法也被执行了,当然你获取一些数据会稍微麻烦一点点
ZAIJIANLUOYE110 2013-10-25
  • 打赏
  • 举报
回复
引用 1 楼 abcmsnet 的回复:
一个网页也用多线程你资源真是富裕啊。不知道你的需求
不知道该怎么办啊?要在页面中调用类似CountAdd这样的阻塞函数,又不想让页面卡住,该怎么实现啊?
  • 打赏
  • 举报
回复
一个网页也用多线程你资源真是富裕啊。不知道你的需求

62,046

社区成员

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

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

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

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