zoukankan      html  css  js  c++  java
  • 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);
            }

    注意里面的注释哦。

  • 相关阅读:
    如何基于GOCW,创建一个实时视频程序
    对OpenCV中“旋转”的思考和实验
    为基于OpenCV的图像处理程序编写界面—关于QTMFCCSharp的选择以及GOCW的介绍
    《学习OpenCV3》第6章课后习题
    《学习OpenCV3》第14章课后习题
    如何识别出轮廓准确的长和宽
    answerOpenCV轮廓类问题解析
    尝试解决cifar10问题
    在训练的过程中降低学习率
    kaggle竞赛_mnist_10%
  • 原文地址:https://www.cnblogs.com/majiang/p/4079200.html
Copyright © 2011-2022 走看看