• c# 多线程 调用带参数函数


    我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。

    一、不带参数的

    namespace AAAAAA
    {
        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!");
            }
        }
    }

    结果显示Method A!

    二、带一个参数的

    由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    
    namespace AAAAAA
    {
        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 ());        
            }
        }
    }

    结果显示Method B!

    三、带多个参数的

    由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    
    namespace AAAAAA
    {
        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);
            }
        }
    }

    结果显示x=2,y=3

    四、利用结构体给参数传值。

    定义公用的public struct,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。

    //结构体
    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("
    ");
        }
    }
  • 相关阅读:
    truncate table
    SSIS学习笔记
    Bing Developer Assistant开发随记
    数组中的逆序对
    第一个只出现一次的字符
    丑数
    把数组排成最小的数
    连续子数组的最大和
    最小的k个数
    数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/tlduck/p/5550328.html
Copyright © 2020-2023  润新知