C#线程启动时传入参数

2 篇文章 0 订阅
我想不带参数的大家应该都会,如下
    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("\n"); 
            } 
        }

示例三,使用委托,

        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。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值