当前位置:编程学习 > C#/ASP.NET >>

asp.net多线程问题


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成功赋值,该怎么做?是不是不用多线程也可以? 多线程 asp.net --------------------编程问答-------------------- 一个网页也用多线程你资源真是富裕啊。不知道你的需求 --------------------编程问答--------------------
引用 1 楼 abcmsnet 的回复:
一个网页也用多线程你资源真是富裕啊。不知道你的需求

不知道该怎么办啊?要在页面中调用类似CountAdd这样的阻塞函数,又不想让页面卡住,该怎么实现啊? --------------------编程问答-------------------- 你要阻塞然后又不让当前页面卡住,那你可以在这个页面用iframe悄悄的嵌入一个含这个阻塞的页面,这样客户感觉不到阻塞,而且你的阻塞方法也被执行了,当然你获取一些数据会稍微麻烦一点点 --------------------编程问答-------------------- 单纯调用这个阻塞方法,可以用AJAX异步执行也可以啊 --------------------编程问答-------------------- 每次打开一个网页,本身就是一个新的线程了,应该不需要再开线程来运行。 --------------------编程问答-------------------- 好像可以用委托 --------------------编程问答--------------------
引用 楼主 ZAIJIANLUOYE110 的回复:
如果要是页面既不卡住又要使txtFirstName成功赋值,该怎么做?


没有可能。

这里使用线程没有任何作用,反而更慢。 --------------------编程问答--------------------
引用 7 楼 sp1234 的回复:
Quote: 引用 楼主 ZAIJIANLUOYE110 的回复:

如果要是页面既不卡住又要使txtFirstName成功赋值,该怎么做?


没有可能。

这里使用线程没有任何作用,反而更慢。

确实感觉还不如不用呢……有什么解决办法吗? --------------------编程问答--------------------
引用 1 楼 abcmsnet 的回复:
一个网页也用多线程你资源真是富裕啊。不知道你的需求
这不是不知道怎么办吗,呵呵……有什么办法吗? --------------------编程问答--------------------
引用 4 楼 abcmsnet 的回复:
单纯调用这个阻塞方法,可以用AJAX异步执行也可以啊

我刚开始试过这种方法是可行的,只是这样的函数太多,太麻烦了,大部分都是阻塞的,而且有的需要处理返回数据并显示……所以想看看多线程怎么解决呢 --------------------编程问答-------------------- 你要从前端应用出发,结合asp.net的页面处理内部机制。绝不能从简单的一两行后台代码来瞎猜“解决方法”。

对于asp.net这种动不动就“刷新html”的请求来说,浏览器客户端连接等在那里、“白屏、死”在那里等着你的Page页面全都执行完必要的序列化html操作。如果你想让txtFirstName.Text也能在输出的html中出现,那么必定要阻塞整个html生成过程(也就是阻塞Page的Render方法执行)。

你敢随便说“阻塞15秒”?

我做页面,不敢阻塞3秒钟!否则这样的页面的用户体验就太差了。

#4楼的说法是对的。许多asp.net程序员明知道asp.net一遍遍刷新html多么慢,可是总也不去学习Ajax。 --------------------编程问答-------------------- 这就好比如说你去饭店点餐,可是你点的菜品当年已经没有了,需要第二年才能种出来,你现在关心人家种菜时用什么农具,这根本不能加快你的餐的上菜速度。

所谓“多线程”解决不了你的问题。应该使用富客户端的编程。如果你觉得javascript编写大型的客户端应用程序显得很垃圾、兼容性不好、缺乏控件积累和知识继承性,那么你可以选择silverlight来开发web应用。 --------------------编程问答--------------------
引用 9 楼 ZAIJIANLUOYE110 的回复:
Quote: 引用 1 楼 abcmsnet 的回复:

一个网页也用多线程你资源真是富裕啊。不知道你的需求
这不是不知道怎么办吗,呵呵……有什么办法吗?

不是已经有人告诉你了吗?
使用异步调用,比如ajax
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,