标签:style blog http io ar color os 使用 sp
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace _04线程演示 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread t1; private void button1_Click(object sender, EventArgs e) { //MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString()); //1.创建一个线程对象,把DoWhile方法传递进去,表示 //该线程启动后会执行这个方法 t1 = new Thread(new ThreadStart(DoWhile)); //把当前线程设置为后台线程 t1.IsBackground = true; //前台线程、后台线程 //默认创建的进程都是“前台线程”,只有当所有“前台线程”都执行完毕后“进程”才会结束。 //可以通过IsBackground=true,把指定线程设置为后台线程。 //后台线程在所有前台线程执行完毕后,自动退出。 //2.启动这个线程 t1.Start();//向操作系统请求启动线程。 } private void DoWhile() { //MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString()); //int index = 0; while (true) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); Thread.Sleep(500); //index++; //if (index > 10) //{ // //设置当前线程“休息”3秒钟 // Thread.Sleep(3000); //} } } private void button2_Click(object sender, EventArgs e) { if (t1 != null) { t1.Abort(); //t1.Suspend(); //t1.Resume(); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.ComponentModel; using System.Threading.Tasks; namespace _05线程其他演示 { class Program { static void Main(string[] args) { #region 启动线程调用无参数无返回值方法 //Thread t1 = new Thread(new ThreadStart(M1)); //t1.Start(); //Console.WriteLine("ok"); //Console.ReadKey(); #endregion #region 启动一个线程执行带参数的方法 //Thread t1 = new Thread(new ParameterizedThreadStart(M2)); //t1.Start(100); //Console.WriteLine("主线程继续。。。。ok"); //Console.ReadKey(); #endregion #region 通过另一种方式启动一个线程执行带参数的方法(把方法封装一下) ////思路:把要执行的方法封装成一个类 ////把原本方法的参数,变成类的属性 ////在方法中把使用参数的地方都用属性来替换 ////在调用该方法的时候,为属性赋值,即为参数赋值。 //MyClass mc = new MyClass(); //mc.Number = 101; //Thread t1 = new Thread(new ThreadStart(mc.M3)); //t1.Start(); //Console.WriteLine("ok"); //Console.ReadKey(); #endregion #region 通过启动一新线程,执行带返回值的方法BackgroundWorker //Console.WriteLine("Main(string[] args)方法中:当前执行的线程编号:{0}", Thread.CurrentThread.ManagedThreadId); ////BackgroundWorker ////创建一个后台执行者对象 //BackgroundWorker backWorker = new BackgroundWorker(); ////设置该对象要在后台执行的方法 //backWorker.DoWork += new DoWorkEventHandler(backWorker_DoWork); ////设置另外一个事件:当程序执行完毕后触发的事件 //backWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backWorker_RunWorkerCompleted); ////开始执行 //backWorker.RunWorkerAsync(new int[] { 1, 100 }); //Console.WriteLine("主线程继续......."); //Console.ReadKey(); ////Task #endregion } //当后台方法执行完毕后触发的事件 static void backWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Console.WriteLine("backWorker_RunWorkerCompleted方法中:当前执行的线程编号:{0}", Thread.CurrentThread.ManagedThreadId); Console.WriteLine("最后输出结果是:{0}", e.Result); } //要在后台执行的方法 static void backWorker_DoWork(object sender, DoWorkEventArgs e) { Console.WriteLine("backWorker_DoWork方法中:当前执行的线程编号:{0}", Thread.CurrentThread.ManagedThreadId); if (e.Argument != null) { int[] arr = e.Argument as int[]; //把方法调用完毕后的值赋值给e.Result e.Result = Sum(arr[0], arr[1]); } } static int Sum(int from, int to) { int sum = 0; for (int i = from; i <= to; i++) { sum += i; } return sum; } //static void M3(int n) //{ // int sum = 0; // for (int i = 1; i < n; i++) // { // sum += i; // } // Console.WriteLine(sum); //} static void M2(object n) { int max = (int)n; int sum = 0; for (int i = 1; i < max; i++) { sum += i; } Console.WriteLine(sum); } static void M1() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } } } public class MyClass { public int Number { get; set; } public void M3() { int sum = 0; for (int i = 1; i < this.Number; i++) { sum += i; } Console.WriteLine(sum); } } }
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/DJYBlog/p/4107680.html