1.C#线程学习

目录

1.使用委托创建线程

2.使用Thread类创建线程

2.1 函数名创建

2.2 lambda表达式创建

2.3给线程传递数据


1.使用委托创建线程

 

定义委托;

通过委托函数的BeginInvoke()方法创建线程。

class Program
    {
        static void Main(string[] args)
        {
            TakesAWhileDelegate dl = TakesAWhile;
            Console.WriteLine("Main Thread ID="+Thread.CurrentThread.ManagedThreadId.ToString());
           IAsyncResult ar= dl.BeginInvoke(1, 3000, null, null);
            //while(!ar.IsCompleted)
            //{
            //    Console.Write(".");
            //    Thread.Sleep(50);
            //}
            while(true)
            {
                if(ar.AsyncWaitHandle.WaitOne(50,false))
                {
                    Console.WriteLine("Can get result");
                    break;
                }
            }
            dl.EndInvoke(ar);
            Console.ReadKey();


        }


        static int TakesAWhile(int data, int second)
        {
            Console.WriteLine("TakesAWhile Started:id="+ Thread.CurrentThread.ManagedThreadId.ToString());
            Thread.Sleep(second);
            
            Console.WriteLine("TakesAWhile Ended.");
            return data++;
        }


        public delegate int TakesAWhileDelegate(int data, int sec);
        public delegate string StringDelegate(string str);


    }

2.使用Thread类创建线程

///主函数部分 

2.1 函数名创建

var t1 = new Thread(TakesAWhile);//函数参数需要是ThreadStart委托定义类型,void返回
            t1.Start();

 

2.2 lambda表达式创建

 var t2 = new Thread(()=> Console.WriteLine("Lambda方式创建,ID={0}",Thread.CurrentThread.ManagedThreadId));
            t2.Start();

///定义部分

 static void TakesAWhile()
        {
            Console.WriteLine("从Thread类创建,线程ID="+Thread.CurrentThread.ManagedThreadId.ToString());
        }

2.3给线程传递数据

(1)方法

(2)方法

 

前后台线程

Thread类创建线程,可以设置IsBackground属性决定线程前后台属性

 

线程的优先级

Thread类创建线程,可以设置Priority属性,影响基本优先级。

线程池

当许多小任务需要完成时,事先创建许多线程。线程数在需要更多时增加,在需要释放资源时减少。

不需要自己创建列表。列表由ThreadPool类托管。池中的最大线程数可配置的。双核CPU默认设置1023个工作线程,1000个I/O线程。

线程池使用限制:

所有入池线程都是后台线程;

不能给入池线程设置优先级;

对于COM对象,入池线程都是多线程单元,许多COM对象都需要单线程单元;

入池的线程只能用于时间较短的任务。如果线程需要一直运行,例如word的拼写检查线程,就应该使用Thread类创建一个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值