c#学习笔记之十五 目前多线程执行函数的思路

1.如果不用传递参数和返回结果,仅仅是执行代码体,则直接在新建线程的时候传递函数的名称。

Thread th = new Thread(FunctionName);

完整代码如下所示,新建子线程开始后,主线程立即返回,主线程与子线程同时运行,在屏幕上打印内容。

using System;
using System.Threading;

namespace EXE
{

class F				{
	public static void Count()
		{
		int max;
		max = 10;
		while( max > 0 )
			{
			max -- ;
			Thread.Sleep(1000);
			Console.WriteLine("child thread count is {0}",max);
			}	
		}
			
					}
class Program{
public static void Main(string[] args)
	{
	Console.WriteLine("this is in main thread");
	Thread th = new Thread(F.Count);//在新建线程的时候传递函数名称.
								//设置在新线程中要执行的函数.
	th.Start();//新线程开始运行.
				//主线程立即返回,往下执行.
				//当然,与此同时,子线程也在运行
	int max;
	max = 10;
	while(max >= 0)
		{
		Console.WriteLine("main thread count is {0}",max--);
		Thread.Sleep(1000);
		}
	Console.WriteLine("Press any key to continue . . . ");
	Console.ReadKey(true);
	}
			}
}


我们可以看到,在屏幕上同时打印主线程和子线程的内容。为什么是在一个黑框框呢,因为只有一个进程。如果是两个进程暨两个运行程序的话,是两个黑框框的。从这一点可以看出多线程和多进程的区别。
2.如果需要传递参数或(和)返回结果,那么就使用函数代表的BeginInvoke()和EndInvoke()方法,中间需要一个IAsyncResult(非同步结果对象)作为转接的接口。

完整代码如下

using System;
using System.Threading;

namespace invoke
{
delegate int Func(int x);
class F			{
	public static int Inrement(int x)
		{
		Thread.Sleep(x*1000);//x 有多大,就停留几秒.一次停够.
		Console.WriteLine("incrementing");
		return x+1;//停顿若干秒后,返回x+1.
		}
				}
class Program {
	public static void Main(string[] args)
		{
		Func f = new Func(F.Inrement);
		int x;
		x = 10;
		//函数代表开始激发,即新开子线程,在其中执行函数代表的代表的函数.
		//激发过程返回一个异步结果对象,里面存的有函数执行状态等
		IAsyncResult result = f.BeginInvoke(x,null,null);
		//函数代表激发后,主线程继续往下运行,
		//目前状态,主、子线程同时运行
		while(x>0)
			{
			Console.WriteLine("the number is {0}",x--);
			Thread.Sleep(1000);//在主线程中,x有多大,就暂停多少秒.分步停.
			}
		int y = f.EndInvoke(result);//终止激发,异步结果对象作为参数.
								   //查询结果对象里的域,看能否成功结束激发
								  //若能,则函数的结果被返回
		Console.WriteLine(y);
	
		Console.Write("Press any key to continue . . . ");
		Console.ReadKey(true);
		}
			  }
}
从屏幕上的打印结果来看,虽然主、子线程都分别停顿十秒,但是它们的耗时并没有累加成20秒,而是主线程耗时10秒执行完毕后,子线程的结果马上出来打印了。

这就是多线程的魅力吧。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值