博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程简单示例
阅读量:6719 次
发布时间:2019-06-25

本文共 3007 字,大约阅读时间需要 10 分钟。

转自原文

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Runtime.Remoting.Messaging;namespace ThreadMulti{    class Program    {        delegate string MyDelegate(string msg);        static object locker=new object();        static void Main(string[] args)        {            System.Console.WriteLine("---------------------");            WriteLine("Main Thread example.", ConsoleColor.Green);            WriteLine("Async Thread example.", ConsoleColor.Red);            WriteLine("Async Thread CallBack", ConsoleColor.Cyan);            System.Console.WriteLine("---------------------\n");            WriteLine("Main Thread Begin ,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Green);            MyDelegate myDelegate = new MyDelegate(Messgae);            //异步调用,传入参数为object类型,此处用stirng示例            myDelegate.BeginInvoke("Hello Thread World!", Completed, "传参示例");            //模拟线程工作,可以看到两线程同时工作            for (int i = 0; i < 5; i++)            {                Thread.Sleep(1000);                WriteLine("Main Thread Works!", ConsoleColor.Green);            }            WriteLine("Main Thread Complete!", ConsoleColor.Green);            Console.ReadKey();        }        static string Messgae(string msg)        {            WriteLine("Async Thread Begin ,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Red);            //模拟线程工作,可以看到两线程同时工作            for (int i = 0; i < 5; i++)            {                Thread.Sleep(500);                WriteLine("Async Thread Works!", ConsoleColor.Red);            }            WriteLine("Async Thread Complete!", ConsoleColor.Red);            return msg;        }        static void Completed(IAsyncResult iresult)        {            //通过 Thread.CurrentThread.ManagedThreadId 可以看出,回调函数运行在异步线程上            WriteLine("Async Thread CallBack Begin,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Cyan);            AsyncResult result = iresult as AsyncResult;            //使用AsyncDelegate获得委托            MyDelegate myDelegate = result.AsyncDelegate as MyDelegate;            //使用EndInvoke获取返回值            string data = myDelegate.EndInvoke(result);            //用 AsyncState 获得传入的参数(即19行“传参示例”四个字)            string asyncState = result.AsyncState.ToString();            WriteLine("返回的数据:"+data, ConsoleColor.Cyan);            WriteLine("异步调用结果状态:" + asyncState, ConsoleColor.Cyan);            //模拟回调函数工作            for (int i = 0; i < 3; i++)            {                Thread.Sleep(500);                WriteLine("Async Thread CallBack Works!", ConsoleColor.Cyan);            }            WriteLine("Async Thread CallBack Complete!", ConsoleColor.Cyan);        }        static void WriteLine(string data, ConsoleColor color)        {            lock (locker)            {                Console.ForegroundColor = color;                Console.WriteLine(data);                Console.ResetColor();             }        }    }}

 

结果:

 

转载地址:http://opcmo.baihongyu.com/

你可能感兴趣的文章
linux RHEL 解决中文网页乱码和界面英文
查看>>
linux中oracle的日常维护命令
查看>>
Linux 修改IP地址和网关
查看>>
linux查看硬件信息
查看>>
apache http的源码编译
查看>>
find命令的参数
查看>>
H3C交换机配置镜像端口
查看>>
ESXI6.0(6.7)实践——惠普A6 7310主板,APU,Realtek网卡的安装之路
查看>>
我的友情链接
查看>>
26期学员参观森华易腾移动IDC机房有感
查看>>
三、一个简单的BDB JE例子
查看>>
在Windows Server2008R2安装Oracle Database 11g Release 2
查看>>
借助mysql和DNS view实现智能DNS(centos6.3 x64环境)
查看>>
维纳-辛钦 (Wiener–Khinchin) 定理
查看>>
修改mysql的数据库密码
查看>>
Nginx安装图文
查看>>
解决DataNode启动不起来原因
查看>>
tomcat处理jsp页面的流程
查看>>
fedora的一些使用记录(二)
查看>>
为什么电子人的世界阴盛阳衰?
查看>>