C# 同一应用程序域不同线程之间的参数传递方式_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# 同一应用程序域不同线程之间的参数传递方式

C# 同一应用程序域不同线程之间的参数传递方式

 2014/11/6 18:21:40  dz45693  程序员俱乐部  我要评论(0)
  • 摘要:很久没有写博客了,最近的项目不用写代码。今天没事就看看thread之间的参数传递方式,这里主要适用于运行在不同线程的两个方法之间参数传递。直接看代码1。方法之间直接传递参数voidDemoParam(){Console.WriteLine("DemoParam:"+Thread.CurrentThread.ManagedThreadId);//Threadt=newThread(newParameterizedThreadStart(testparam));//t.Start
  • 标签:程序 C# 应用 方式 应用程序 线程

很久没有写博客了,最近的项目不用写代码。今天没事就看看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);
        }

注意里面的注释哦。

 

发表评论
用户名: 匿名