zoukankan      html  css  js  c++  java
  • C#线程启动时传入参数

    我想不带参数的大家应该都会,如下
        class AAA 
        { 
            public static void Main() 
            { 
                Thread t = new Thread(new ThreadStart(A)); 
                t.Start(); 
    
                Console.Read(); 
            } 
    
            private static void A() 
            { 
                Console.WriteLine("Method A!"); 
            } 
        } 
    

    若是带一个参数,Thread类的构造方法中提供了此项功能。如下,

        class AAA 
        { 
            public static void Main() 
            {        
                Thread t = new Thread(new ParameterizedThreadStart(B)); 
                t.Start("B"); 
                Console.Read(); 
            } 
            private static void B(object obj) 
            { 
                Console.WriteLine("Method {0}!",obj.ToString ()); 
            } 
        } 
    
    但是若要带多个参数,就需要进行多一步的处理,处理方法很多,稍微举几例,

    示例一:

    借用对象的属性传值,将对象作为参数

        class AAA 
        { 
            public static void Main() 
            { 
                My m = new My(); 
                m.x = 2; 
                m.y = 3; 
                Thread t = new Thread(new ThreadStart(m.C)); 
                t.Start(); 
                Console.Read(); 
            } 
        class My 
        { 
            public int x, y; 
            public void C() 
            { 
                Console.WriteLine("x={0},y={1}", this.x, this.y); 
            } 
        } 
    

    示例二:

    借用结构体

        struct RowCol 
        { 
            public int row; 
            public int col; 
        }; 
    
        //定义方法 
        public void Output(Object rc) 
            { 
                RowCol rowCol = (RowCol)rc; 
                for (int i = 0; i < rowCol.row; i++) 
                { 
                    for (int j = 0; j < rowCol.col; j++) 
                        Console.Write("{0} ", _char); 
                    Console.Write("
    "); 
                } 
            }
    

    示例三,使用委托,

            static void Main(string[] args)
            {
                string name = "sfsfsf";
                string id = "12323";
                Thread th = new Thread(new ThreadStart(delegate()
                    {
                        run(name, id);
                    }));
                th.Start();
                Console.Read();
                th.Abort();
            }
            public static void run(string name, string id)
            {
                Console.WriteLine(name + "," + id);
            } 
    

    最后一种方法,使用匿名参数,

        class Program
        {
            static void Main(string[] args)
            {
                string hello = "hello world";
                //如果写成Thread thread = new Thread(ThreadMainWithParameters(hello));这种形式,编译时就会报错
                Thread thread = new Thread(() => ThreadMainWithParameters(hello));
                thread.Start();
                Console.Read();
            }
            static void ThreadMainWithParameters(string str)
            {
                 Console.WriteLine("Running in a thread,received: {0}", str);
            }
        }

    匿名方法的使用使代码看上去简单明了,但我们一定要注意匿名方法会引发的一些不易察觉的问题,

    其中就包括匿名方法引起的变量共享问题,有关此问题的详细介绍请参见

    文章:http://www.2cto.com/kf/201112/113646.html。



  • 相关阅读:
    jQuery1.9(辅助函数)学习之—— jQuery.param( obj ); 编辑
    jQuery1.9(辅助函数)学习之——.serialize();
    jQuery1.9(辅助函数)学习之——.serializeArray();
    聊聊 getClientRects 和 getBoundingClientRect 方法
    聊一聊数组的map、reduce、foreach等方法
    Typescript 接口(interface)
    配置 tsconfig.json
    Chrome 插件推荐
    Typescript 基础知识
    package.json
  • 原文地址:https://www.cnblogs.com/ice-/p/4244941.html
Copyright © 2011-2022 走看看