📄 program.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Runtime.Remoting.Lifetime;
using System.Runtime.Remoting.Messaging ;
namespace MultiThread
{
class Program
{
delegate string MyMethoudDelegate(string param);
delegate string MyMethoudMPDel(string par1,string par2);
static void Main(string[] args)
{
Program me=new Program();
#region 无参
ThreadStart firstTD = new ThreadStart(me.FunctionThreadInSec);
Thread td = new Thread(firstTD);
td.Name = "sec";
td.Start();
#endregion
#region 有参 ParameterizedThreadStart
MyClass mcs = new MyClass();
ParameterizedThreadStart pts = new ParameterizedThreadStart(mcs.MyMethod2);
Thread td3 = new Thread(pts);
td3.Start("123");
#endregion
#region 有参 构造
MyClass mc = new MyClass("tsinhata");
Thread td2 = new Thread(new ThreadStart(mc.MyMethod1));
td2.Name = "Construct";
td2.Start();
#endregion
#region 有参 线程池//线程池概念
MyClass mc2 = new MyClass();
ThreadPool.QueueUserWorkItem(new WaitCallback(mc2.MyMethod2), "tsin");
Thread.Sleep(300);
#endregion
#region 异步委托传参
MyClass mc3 = new MyClass();
MyMethoudDelegate mydelegate = new MyMethoudDelegate(mc3.MyMethod3);
///delegate begin end
mydelegate.BeginInvoke("methoud1parm1", new AsyncCallback(me.AfterDelegate), null);
///多参
MyMethoudMPDel mulpar = new MyMethoudMPDel(mc3.MyMutilParameters);
IAsyncResult asc= mulpar.BeginInvoke("hata", "tsin", new AsyncCallback(me.AfterDelegate), null);
///委托执行完成,主线程才继续
asc.AsyncWaitHandle.WaitOne();
#endregion
Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());
Console.WriteLine("exit..?");
Thread.Sleep(5000);///主线程等待
string mm = Console.ReadLine();
}
/// <summary>
/// 委托结束
/// </summary>
/// <param name="asr"></param>
void AfterDelegate(IAsyncResult asr)
{
AsyncResult async = (AsyncResult)asr;
MyMethoudDelegate DelegateInstance = async.AsyncDelegate as MyMethoudDelegate;
if (DelegateInstance != null)
{
Console.WriteLine("函数调用返回值:{0}\n", DelegateInstance.EndInvoke(asr));
}
else
{
MyMethoudMPDel delins = async.AsyncDelegate as MyMethoudMPDel;
Console.WriteLine("函数调用返回值:{0}\n", delins.EndInvoke(asr));
}
}
void FunctionThreadInSec()
{
for(int i=0;i<10;i++)
{
Thread.Sleep(500);
Console.WriteLine(i.ToString() + Thread.CurrentThread.Name );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -