线程简介
官方线程介绍:https://docs.microsoft.com/zh-cn/dotnet/standard/threading/?view=netframework-4.8
C#创建无参、有参的线程
参考文章:http://c.biancheng.net/csharp/140/
ThreadStart:创建无参的线程:
class Program
{
static void Main(string[] args)
{
ThreadStart ts = new ThreadStart(PrintEven);
Thread t = new Thread(ts);
t.Start();
}
//定义打印0~10中的偶数的方法
private static void PrintEven()
{
for(int i = 0; i <= 10; i=i+2)
{
Console.WriteLine(i);
}
}
}
ParameterizedThreadStart:创建需要传入参数的线程
class Program
{
static void Main(string[] args)
{
ParameterizedThreadStart pts = new ParameterizedThreadStart(PrintEven);
Thread t = new Thread(pts);
t.Start(10);
}
//打印0~n中的偶数
private static void PrintEven(Object n)
{
for(int i=0;i<=(int)n; i = i + 2)
{
Console.WriteLine(i);
}
}
}
C#创建回调传参的线程
ThreadStart 和 ParameterizedThreadStart 委托都没有返回值,因为没有从异步调用返回数据的位置。 若要检索线程方法的结果,可以使用回调方法:
using System;
using System.Threading;
// ThreadWithState类包含任务所需的信息、执行任务的方法以及任务完成时要调用的委托
public class ThreadWithState
{
// 任务中使用的状态信息
private string boilerplate;
private int numberValue;
// 委托用于在任务完成时执行回调方法
private ExampleCallback callback;
// 构造函数获取状态信息和回调委托
public ThreadWithState(string text, int number,ExampleCallback callbackDelegate)
{
boilerplate = text;
numberValue = number;
callback = callbackDelegate;
}
// 线程过程执行任务,例如格式化和打印文档,然后使用打印的行数调用回调委托
public void ThreadProc()
{
Console.WriteLine(boilerplate, numberValue);
if (callback != null)
callback(1);
}
}
// 为回调方法定义签名的委托
public delegate void ExampleCallback(int lineCount);
// 示例的入口点
public class Example
{
public static void Main()
{
// 提供任务所需的状态信息
ThreadWithState tws = new ThreadWithState("此报告显示数字 {0}.",42,new ExampleCallback(ResultCallback)
);
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
Console.WriteLine("主线程做一些工作,然后等待");
t.Join();
Console.WriteLine(
"独立任务已完成,主线程结束");
}
// 回调方法必须与回调委托的签名匹配
public static void ResultCallback(int lineCount)
{
Console.WriteLine(
"独立任务打印了 {0} 行", lineCount);
}
}
// 示例显示以下输出:
// 主线程做一些工作,然后等待
// 此报告显示数字42
// 独立任务打印了1行
// 独立任务已完成,主线程结束
委托可以使用Action、Func和Predicate,代码更简洁。