多线程的开启与管理
先写一个用于线程的类
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
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 }
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 }
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中进行管理,而不是用线程池