很久没有写博客了,最近的项目不用写代码。今天没事就看看thread之间的参数传递方式,这里主要适用于运行在不同线程的两个方法之间参数传递。直接看代码
1。方法之间直接传递参数
void DemoParam() { Console.WriteLine("DemoParam:" + Thread.CurrentThread.ManagedThreadId); //Thread t = new Thread(new ParameterizedThreadStart(testparam)); //t.Start("majaing"); ThreadPool.QueueUserWorkItem(new WaitCallback(testparam),"majaing"); } void testparam(object obj) { Console.WriteLine("DemoParam:" + Thread.CurrentThread.ManagedThreadId); Console.WriteLine(obj.ToString()); }
2。借助Static
//[ThreadStatic] static string namekey; void DemoStatic() { Console.WriteLine("Static:" + Thread.CurrentThread.ManagedThreadId); namekey = "majiang"; ThreadPool.QueueUserWorkItem(new WaitCallback(testStatic)); } void testStatic(object obj) { Console.WriteLine("Static:" + Thread.CurrentThread.ManagedThreadId); Console.WriteLine(namekey); }
3。借助AppDomain
void DemoAppDomain() { Console.WriteLine("AppDomain:"+Thread.CurrentThread.ManagedThreadId); AppDomain.CurrentDomain.SetData("name", "majiang"); ThreadPool.QueueUserWorkItem(new WaitCallback(testAppDomain)); } void testAppDomain(object obj) { Console.WriteLine("AppDomain:"+Thread.CurrentThread.ManagedThreadId); var a = AppDomain.CurrentDomain.GetData("name"); Console.WriteLine(a); }
4。借助CallContext
void DemoCallContext() { Console.WriteLine("CallContext"+Thread.CurrentThread.ManagedThreadId); // ExecutionContext.SuppressFlow(); CallContext.LogicalSetData("name", "majiang"); ThreadPool.QueueUserWorkItem(new WaitCallback(testCallContext)); } void testCallContext(object obj) { Console.WriteLine("CallContext"+Thread.CurrentThread.ManagedThreadId); var a = CallContext.LogicalGetData("name"); Console.WriteLine(a); }
注意里面的注释哦。