很久沒有寫博客了,最近的項目不用寫代碼。今天沒事就看看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); }
注意里面的注釋哦。
新聞熱點
疑難解答