【C#】40. 线程参数传递的三种方法

本文主要介绍三种向线程传递参数的方法,使用的例子依然是《C#多线程编程实例》。

这三种方法分别是:1、写一个类型,在构造函数中传参,而后在类型中写无参数函数,里面使用内部变量,从而达到传参的目的。2、使用lambda方法,通过直接调用已有的带参数函数,通过lambda表达式向线程传参。3、使用thread.start(object parameter)的方法。

其中,第二种方法与第一种方法其实比较类似。


using System;
using System.Threading;


namespace Chapter1.Recipe8
{
	class Program
	{
		static void Main(string[] args)
		{
			var sample = new ThreadSample(10);


			var t1 = new Thread(sample.CountNumbersInThreadSample);
			t1.Name = "线程t1";
			t1.Start();
			t1.Join();


			Console.WriteLine("--------------------------");


			var t2 = new Thread(Count);
			t2.Name = "线程t2";
			t2.Start(8); //传入参数给线程
			t2.Join();


			Console.WriteLine("--------------------------");


			var t3 = new Thread(() => CountNumbers(12));
			t3.Name = "线程3";
			t3.Start();
			t3.Join();
			Console.WriteLine("--------------------------");


			int i = 10;
			var t4 = new Thread(() => PrintNumber(i));
			i = 20;
			var t5 = new Thread(() => PrintNumber(i));
			t4.Start(); 
			t5.Start();
            Console.Read();
		}


		static void Count(object iterations)
		{
			CountNumbers((int)iterations);
		}


		static void CountNumbers(int iterations)
		{
			for (int i = 1; i <= iterations; i++)
			{
				Thread.Sleep(TimeSpan.FromSeconds(0.5));
				Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
			}
		}


		static void PrintNumber(int number)
		{
			Console.WriteLine(number);
		}


		class ThreadSample
		{
			private readonly int _iterations;


			public ThreadSample(int iterations)
			{
				_iterations = iterations;
			}
			public void CountNumbersInThreadSample()
			{
				for (int i = 1; i <= _iterations; i++)
				{
					Thread.Sleep(TimeSpan.FromSeconds(0.5));
					Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
				}
			}
		}
	}


	
}




我们要向函数传入参数,用以确定迭代次数。在t1线程中,使用的是类ThreadSample。首先,生成一个实例sample并通过构造函数传入迭代参数,而后在将sample中的方法CountNumbersInThreadSample()作为线程t1,接着就start t1并且join等待。t3使用的lambda表达式:() => CountNumbers(12) 这种做法非常简洁,而且实质上与第一种方法相同。t2使用的是start(object)方法,但是由于只能接受object参数,所以需要转换为int。

t4和t5是为了说明虽然t4在t5之前就定义了thread,但是在他们start()前,i被改为20了,所以两个线程得到的参数都是20.


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值