多线程的开启与管理

 

先写一个用于线程的类
work代码
 1 public class work
 2     {
 3         //定义一个线程
 4         Thread thread = null;
 5         //关键字
 6         string Key = string.Empty;
 7         //控制while语句的
 8         bool s = false;
 9         string value = string.Empty;
10         int i = 0;
11         //构造方法
12         public work(string name)
13         {
14             this.Key = name;
15         }
16         //开启线程,实例化线程
17         public void start()
18         {
19             thread = new Thread(read);
20             thread.Name = Key;
21             thread.Start();
22         }
23         //线程开启要执行的方法
24         public void read()
25         {
26             while (!s)
27             {                
28                 value = thread.Name + "线程第" + i + "次执行";
29                 Thread.Sleep(2000);
30                 i++;
31                 // 在这里把你想要处理的方法放进来
32             }
33         }
34         //停止线程
35         public void stop()  //线程停止
36         {
37             s = true;
38             this.thread.Abort();
39         }
40         //获取线程状态
41         public string GetThreadState()
42         {
43             return thread.ThreadState.ToString();
44         }
45         //获取线程第几次执行
46         public string GetValue()
47         {
48             return value;
49         }
50     }
51 

 

 再写用户开启多线程跟关闭,管理的具体方法

 

操作代码
 1 protected void open_Click(object sender, EventArgs e)
 2         {
 3             //定义一个哈希表
 4             Hashtable ht = new Hashtable();
 5             //session是要存哈希用的
 6             if (Session["thread"!= null)
 7             {
 8                 try
 9                 {
10                     //实例化并开启线程
11                     work w = null;
12                     if (tb.Text.Trim() != "")
13                         w = new work(tb.Text.Trim());
14                     w.start();
15 
16                     //将已经存入session中的哈希信息传给ht
17                     ht = (Hashtable)Session["thread"];
18                     //将线程存入哈希表中
19                     ht.Add(tb.Text.Trim(), w);
20                     //打印线程信息
21                     PrintThread();
22                     HttpContext.Current.Response.Write("<script>alert('线程创建成功');</script>");
23                 }
24                 catch(Exception ex)
25                 {
26                     HttpContext.Current.Response.Write("<script>alert('来自创建有session:" + ex.Message + "');</script>");
27                 }
28             }
29             else
30             {
31                 try
32                 {
33                     work w = null;
34                     if (tb.Text.Trim() != "")
35                         w = new work(tb.Text.Trim());
36                     w.start();
37                     
38                     ht.Add(tb.Text.Trim(), w);
39                     Session["thread"= ht;
40                     PrintThread();
41                 }
42                 catch (Exception ex)
43                 {
44                     HttpContext.Current.Response.Write("<script>alert('来自创建无session" + ex.Message + "');</script>");
45                 }
46             }
47         }

 

关闭线程

关闭代码
 1 //关闭线程
 2         protected void close_Click(object sender, EventArgs e)
 3         {
 4             if (Session["thread"== null)
 5                 HttpContext.Current.Response.Write("<script>alert('对不起,线程为空');</script>");
 6             else
 7             {
 8                 try
 9                 {
10                     //将线程哈希取出
11                     Hashtable ht = (Hashtable)Session["thread"];
12                     //停止线程
13                     work w = (work)ht[tb.Text.Trim()];
14                     w.stop();
15                     w = null;
16                     ht.Remove(tb.Text.Trim());
17                     //打印信息
18                     PrintThread();
19                     HttpContext.Current.Response.Write("<script>alert('线程" + tb.Text.Trim() + "已关闭');</script>");
20                 }
21                 catch (Exception ex)
22                 {
23                     HttpContext.Current.Response.Write("<script>alert('" + ex.Message + "');</script>");
24                 }
25             }
26         }

 

此方法是将多线程存入到hashtable中进行管理,而不是用线程池

posted on 2010-05-14 16:06  skeeter  阅读(3849)  评论(0编辑  收藏  举报

导航