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);
        }

注意里面的注释哦。

时间: 2024-08-23 22:49:35

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

jmeter中线程之间传递参数

JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法就是使用属性.属性为所有 JMeter 线程所共享,因此当某个线程设置一个属性后,其他线程就可以读取更新后的值. 如果存在大量数据需要在线程间传递,那么可以考虑使用文件.例如,测试人员可以在一个线程中使用监听器,保存响应到文件(Save Responses to a file )或者 BeanShe

Jmeter 跨线程组传递参数 之两种方法

终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直到登录接口的参数失效了,需再次发送一次登录接口,又可以多次使用其参数,下面举例子: 1.登录接口中利用 Json Path Extractor 获取到登录接口的响应参数,(怎么获取上一节讲过) 终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为

线程之间的通信

1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中.    2. notify():唤醒线程池中的一个线程(任何一个都有可能).    3. notifyAll():唤醒线程池中的所有线程.  备注    1.这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法.    2.必须要明确到底操作的是哪个锁上的线程!    3.wa

漫谈并发编程(五):线程之间的协作

编写多线程程序需要进行线程协作,前面介绍的利用互斥来防止线程竞速是来解决线程协作的衍生危害的.编写线程协作程序的关键是解决线程之间的协调问题,在这些任务中,某些可以并行执行,但是某些步骤需要所有的任务都结束之后才能开动. wait()与notifyAll() wait()使你可以等待某个条件发生变化,wait()会在等待外部世界产生变化的时候将任务挂起,并且只有在notify()或notifyAll()发生时,即表示发生了某些感兴趣的事物,这个任务才会被唤醒并去检查所产生的变化. 调用sleep

进程、应用程序域与上下文之间的关系

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非分布式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的. 进程可以理解为一个程序的基本边界. 一.Process的常用属性与方法 在System.Diagnostics命名空间当中存在Process类,专门用于管理进程的开始.结束,访问进程中的模块,获取进程中的线程,设定进程的优先级

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

C# 线程之间的同步

1.通过Join方法,暂停当前线程 Thread secondThread = new Thread(new ThreadStart(ThreadMethod)); secondThread.Start(); ... secondThread.Join(); 2.通过启动APM异步操作的方法,得到一个IAsyncResult对象,通过它有三种方法使得两个线程同步. public interface IAsynResult { object AsyncState{get; } WaitHandle

转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系

原文:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 一.进程的概念与作用 进程(Process)是Windo

基础学习day12--多线程一线程之间的通信和常用方法

一.线程之间的通信 1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中.    2. notify():唤醒线程池中的一个线程(任何一个都有可能).    3. notifyAll():唤醒线程池中的所有线程.  备注    1.这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法.    2.必须要明确到底操作的是哪个锁上的线