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

asp.net 线程的问题


如上图,更新操作很费时间,大概要等待30秒时间 , 这时候要么是显示一个等待窗口等更新完成,要么是使用线程

如果只是显示一个等待窗口的话,等待的时间有点长,用户肯定不愿意死等.
那使用线程是否能解放这个等待时间呢

我按网上的例子试了一下,新建了线程,可点击更新后,点页面其它地方还是没反应,一直到更新完成才会有反应,

 
//更新操作
      protected void rptweb_ItemCommand(object source, RepeaterCommandEventArgs e)
      {
          try
          {
              _ID = Convert.ToInt32(((Label)e.Item.FindControl("lb_id")).Text);//获取要更新的ID
              UrlPath = ((Label)e.Item.FindControl("lb_url")).Text;//获取要更新的URL

              //新建线程执行更新
              ThreadStart mythread = new ThreadStart(UPSEO);
              Thread thread = new Thread(mythread);
              thread.Start();
              Thread.Sleep(30000);
              thread.Abort();
          }
          catch (Exception)
          { }
      }

//更新方法
 public void UPSEO()
 {

  }



对线程不是太懂,求解答 ASP.NET 多线程 --------------------编程问答-------------------- http://msdn.microsoft.com/en-us/magazine/cc164051.aspx --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
http://msdn.microsoft.com/en-us/magazine/cc164051.aspx


看不懂啊,老大 --------------------编程问答-------------------- 怎么没人来啊,来人啊 --------------------编程问答-------------------- 楼主,使用线程池。 --------------------编程问答--------------------
引用 4 楼 szzhuyike 的回复:
楼主,使用线程池。


不太懂啊 --------------------编程问答-------------------- http://www.cnblogs.com/xugang/archive/2008/03/23/1118584.html --------------------编程问答-------------------- 有没有实际的办法 --------------------编程问答--------------------
引用 4 楼 szzhuyike 的回复:
楼主,使用线程池。


也需要学习 --------------------编程问答-------------------- 更新操作花费30秒,你是不是应该先看一下代码,怎么会花费这么长时间?而不是优先考虑多线程问题. --------------------编程问答-------------------- 建议还是从代码入手,提高更新速度。
多线程的话就用线程池,可以看看这方面的资料 --------------------编程问答-------------------- ProgressBar组件实现实时进度条 --------------------编程问答-------------------- 最简单的方法就是把14,15行去掉。 --------------------编程问答--------------------
引用 9 楼 tsgx_1989 的回复:
更新操作花费30秒,你是不是应该先看一下代码,怎么会花费这么长时间?而不是优先考虑多线程问题.


因为更新时调用了几个网络接口,所以时间有点长,如果只是更新数据库的话,肯定用不了那么长时间 --------------------编程问答--------------------
引用 12 楼 SQL_Beginner 的回复:
最简单的方法就是把14,15行去掉。


正解,可以了

不过开启的线程不用关闭吗?还是他过一段时间自动关闭了 --------------------编程问答--------------------
引用 14 楼 zx_001 的回复:
Quote: 引用 12 楼 SQL_Beginner 的回复:

最简单的方法就是把14,15行去掉。


正解,可以了

不过开启的线程不用关闭吗?还是他过一段时间自动关闭了

NO,不会过一段时间自动关闭。
线程在下面几个情况下自动关闭,其中之一就是“The thread function returns.”
你上面 UPSEO()就是指The thread function,它返回的时候,线程就自动关闭。
http://msdn.microsoft.com/en-us/library/ms686724%28v=vs.85%29.aspx --------------------编程问答--------------------
引用 15 楼 SQL_Beginner 的回复:
Quote: 引用 14 楼 zx_001 的回复:

Quote: 引用 12 楼 SQL_Beginner 的回复:

最简单的方法就是把14,15行去掉。


正解,可以了

不过开启的线程不用关闭吗?还是他过一段时间自动关闭了

NO,不会过一段时间自动关闭。
线程在下面几个情况下自动关闭,其中之一就是“The thread function returns.”
你上面 UPSEO()就是指The thread function,它返回的时候,线程就自动关闭。
http://msdn.microsoft.com/en-us/library/ms686724%28v=vs.85%29.aspx


我的UPSEO没有返回值

还有根据上面的写法,当我点击一个更新后又点击另一个更新按钮,这时候是有两个线程呢,还是把第一次点击的那个线程给替换掉了? --------------------编程问答--------------------
 
 ThreadStart mythread = new ThreadStart(UPSEO);

在掉用UPSEO的时候可不可以传参
例如:
 ThreadStart mythread = new ThreadStart(UPSEO(id,path));这样写 --------------------编程问答--------------------
引用 16 楼 zx_001 的回复:
Quote: 引用 15 楼 SQL_Beginner 的回复:

Quote: 引用 14 楼 zx_001 的回复:

Quote: 引用 12 楼 SQL_Beginner 的回复:

最简单的方法就是把14,15行去掉。


正解,可以了

不过开启的线程不用关闭吗?还是他过一段时间自动关闭了

NO,不会过一段时间自动关闭。
线程在下面几个情况下自动关闭,其中之一就是“The thread function returns.”
你上面 UPSEO()就是指The thread function,它返回的时候,线程就自动关闭。
http://msdn.microsoft.com/en-us/library/ms686724%28v=vs.85%29.aspx


我的UPSEO没有返回值

还有根据上面的写法,当我点击一个更新后又点击另一个更新按钮,这时候是有两个线程呢,还是把第一次点击的那个线程给替换掉了?

不会替换,如果第一个没有结束,那就是2个。 --------------------编程问答-------------------- 传递参数 
       //更新方法
        public void UPSEO(int a, string b)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Thread  mythread = new Thread(delegate()
                {
                    UPSEO(123, "abc");
                });
            mythread.Start();
        } --------------------编程问答-------------------- 还有什么问题,尽管问,别客气。 --------------------编程问答--------------------
引用 20 楼 SQL_Beginner 的回复:
还有什么问题,尽管问,别客气。

有点不好意思了都,再问下去,就感觉很白痴了

多谢了 --------------------编程问答--------------------
引用 20 楼 SQL_Beginner 的回复:
还有什么问题,尽管问,别客气。
--------------------编程问答--------------------
引用 19 楼 SQL_Beginner 的回复:
传递参数 
       //更新方法
        public void UPSEO(int a, string b)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Thread  mythread = new Thread(delegate()
                {
                    UPSEO(123, "abc");
                });
            mythread.Start();
        }


像这样,UPSEO没有返回值,这进程怎么结束,如果结束会不会把所有的进程给都结束了 --------------------编程问答--------------------
引用 4 楼 szzhuyike 的回复:
楼主,使用线程池。


看楼主的回答,我想是大神,不知道对SQl精能不,我想问下,我用Sql去引用另外一个服务器上的视图,就是服务器外链,现在查询的时间大于30秒,用这个可以优化不。 --------------------编程问答--------------------
引用 23 楼 zx_001 的回复:
Quote: 引用 19 楼 SQL_Beginner 的回复:

传递参数 
       //更新方法
        public void UPSEO(int a, string b)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Thread  mythread = new Thread(delegate()
                {
                    UPSEO(123, "abc");
                });
            mythread.Start();
        }


像这样,UPSEO没有返回值,这进程怎么结束,如果结束会不会把所有的进程给都结束了

--------------------编程问答--------------------
引用 23 楼 zx_001 的回复:
Quote: 引用 19 楼 SQL_Beginner 的回复:

传递参数 
       //更新方法
        public void UPSEO(int a, string b)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Thread  mythread = new Thread(delegate()
                {
                    UPSEO(123, "abc");
                });
            mythread.Start();
        }


像这样,UPSEO没有返回值,这进程怎么结束,如果结束会不会把所有的进程给都结束了

这个进程?这个进程是ASP.NET的进程了,不会结束的,因为ASP.NET用CLR ThreadPool处理请求,所以现场不会全部终止,所以ASP.NET进程不会终止。 --------------------编程问答-------------------- 继续问,有啥不好意思的。 --------------------编程问答--------------------
引用 26 楼 SQL_Beginner 的回复:
Quote: 引用 23 楼 zx_001 的回复:

Quote: 引用 19 楼 SQL_Beginner 的回复:

传递参数 
       //更新方法
        public void UPSEO(int a, string b)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Thread  mythread = new Thread(delegate()
                {
                    UPSEO(123, "abc");
                });
            mythread.Start();
        }


像这样,UPSEO没有返回值,这进程怎么结束,如果结束会不会把所有的进程给都结束了

这个进程?这个进程是ASP.NET的进程了,不会结束的,因为ASP.NET用CLR ThreadPool处理请求,所以现场不会全部终止,所以ASP.NET进程不会终止。


不是进程 是线程 --------------------编程问答--------------------
引用 27 楼 SQL_Beginner 的回复:
继续问,有啥不好意思的。


大神,你真是太好了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,