命名空间 System.Threading //创建多线程 Thread (线程实例名称thd) =new Thread(new ThredStart(方法名称)); //方法名称指写一个方法调用 thd.Start(); //开始执行 -------------------------------------------------------------------------------------------- 多线程属性 CurrentThread //获取当前运行的线程 IsAlive //获取当前现在执行状态值 Name //获取线程名称 Priority //设置或获取线程优先值 ThreadState //获取包含当前线程的状态值 ---------------------------------------------- 多线程方法 Start(); //执行多线程 Sleep(); //禁止线程运行的毫秒数 睡眠 Abort(); //调用该方法终止线程 Join(); //禁止调用线程,直到线程终止 Thread.Interrupt(); //中止处于Sleep或者join线程状态的线程 Suspend(); //挂起线程;如果线程已经挂断,则方法无效 Resume(); //恢复被挂起的线程 锁定 lock(this) { //代码 } ------------------------------------------------------------- 摇奖机 ---------------------------------- namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { //2005 bug需要设置 Control.CheckForIllegalCrossThreadCalls = false; this.label1.Text = "猜"; this.label2.Text = "猜"; this.label3.Text = "猜"; //设置转换为字符串 this.label4.Text = b.ToString(); this.textBox1.Text = "100"; } int b = 54561; //随机 Random a = new Random(); //鼠标点击事件 private void button1_Click(object sender, EventArgs e) { //比较输入金额与金库金额 if (int.Parse(this.label4.Text.ToString()) { MessageBox.Show("金额不够"); return; } //创建多线程 并未执行 Thread thd1 = new Thread(new ThreadStart(Run1)); Thread thd2 = new Thread(new ThreadStart(Run2)); Thread thd3 = new Thread(new ThreadStart(Run3)); Thread thd4 = new Thread(new ThreadStart(Run4)); //执行多线程 thd1.Start(); thd2.Start(); thd3.Start(); thd4.Start(); } //方法 public void Run1() { //循环产生随机数字 for(int i=0;i<=100;i++) { this.label1.Text = a.Next(10).ToString(); //随机睡眠 Thread.Sleep(a.Next(10)); i++; } } public void Run2() { for (int i = 0; i <= 100; i++) { this.label2.Text = a.Next(10).ToString(); Thread.Sleep(a.Next(10)); i++; } } public void Run3() { for (int i = 0; i <= 100; i++) { this.label3.Text = a.Next(10).ToString(); Thread.Sleep(a.Next(10)); i++; } } //控制多线程方法 public void Run4() { for (int i = 0; i <= 100; i++) { if (i == 100) { //判断3个随机数是否相同 if (this.label1.Text == this.label2.Text && this.label2.Text==this.label3.Text) { //相同增加金额10倍 b = b + int.Parse(textBox1.Text.ToString())*10; this.label4.Text = b.ToString(); } //不同 减少金额 b = b - int.Parse(textBox1.Text.ToString()); this.label4.Text = b.ToString(); } } } } } ------------------------------------------------------------------------------------------------------------ 多线程 质数线程的控制 ----------------------- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; //导包 using System.Threading; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Thread thd;
private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; this.button2.Enabled = false; this.button3.Enabled = false; this.button4.Enabled = false;
} //停止按钮 private void button4_Click(object sender, EventArgs e) { this.button4.Enabled = false; this.button1.Enabled = true; this.button2.Enabled = true; //清除线程 thd.Abort(); }
private void button2_Click(object sender, EventArgs e) { try { //如果线程的当前状态为运行或休眠等待,则暂停线程 //ThreadState.Running线程状态已启动 if (thd.ThreadState==ThreadState.Running || thd.ThreadState== ThreadState.WaitSleepJoin) { //暂停线程 thd.Suspend(); //禁用暂停按钮 this.button2.Enabled = false; //启用恢复按钮 this.button3.Enabled = true; //禁用停止按钮 this.button4.Enabled = false; } } catch (ThreadStartException msg) { //输出异常信息 MessageBox.Show(msg.ToString(),"异常"); } }
public void Generate() { //true=质数,false=非质数 bool Isprime = true; //存放质数的个数 int count = 2; //第一个数是质数,添加列表中 this.listBox1.Items.Add(2); //执行循环生成另外24个质数 for (int i = 3; count < 50; i+=2) { Isprime = true; //循环次数是要检查的数字"i"的一半 for (int j = 2; j <=(i/2); j++) { //检查"i"是否可以被整除 if (i%j==0) { Isprime=false; break; } } //显示质数并递增计算器 if (Isprime) { this.listBox1.Items.Add(i); count++; //使该线程休眠100毫秒,以启用线程的暂停和恢复 Thread.Sleep(100); } } //线程完成执行后,启用和禁用这些按钮 this.button1.Enabled=true; this.button2.Enabled=false; this.button3.Enabled=false; this.button4.Enabled=false; }
private void button1_Click(object sender, EventArgs e) { //创建线程 thd = new Thread(new ThreadStart(Generate)); //为线程指定名称 thd.Name = "质数"; //启用暂停按钮 this.button2.Enabled = true; //禁用开始按钮 this.button1.Enabled = false; //启用停止按钮 this.button4.Enabled = true; //初始化线程 //执行线程 thd.Start(); }
private void button3_Click(object sender, EventArgs e) { //线程状态ThreadState //Suspended 已挂断 //SuspendRequested 正在请求挂断 //WaitSleepJoin 线程已北阻止 //Running 线程已启动 //Abort(); 清除线程 //Suspend(); 暂停进程 //Resume(); 恢复进程 if (this.thd.ThreadState== ThreadState.Suspended || thd.ThreadState== ThreadState.SuspendRequested || thd.ThreadState== ThreadState.WaitSleepJoin || Convert.ToInt32(thd.ThreadState)==96) { try { //恢复线程 thd.Resume(); //禁用恢复按钮 this.button3.Enabled = false; //启用暂停按钮 this.button2.Enabled = true; //启用停止按钮 this.button4.Enabled = true; } catch (ThreadStartException msg) { MessageBox.Show(msg.ToString(), "异常"); } } } } }
|