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);
}
}
}