C# 往多线程传递安全参数的方法

文章讲述了在C#中如何避免线程参数类型错误,通过将参数封装到类PassParametersToThread中,并提供无参方法,确保线程安全地传递和执行函数。
摘要由CSDN通过智能技术生成

        在C#构造一个线程时,要向其传递一个函数,这个函数可以试简单的无参函数,也可以是参数为Object类型的函数,但是由于参数类型为Object,因此编译器无法实行类型检查,看下面的例子:

class Program
    {
        static void Main(string[] args)
        {
            Program obj = new Program();
            ParameterizedThreadStart PTSD = new ParameterizedThreadStart(obj.DisplayNumbers);
            Thread t1 = new Thread(PTSD);
           
            t1.Start("Hi"); 
            Console.Read();
        }

       public void DisplayNumbers(object Max)
        {
            int Number = Convert.ToInt32(Max);
            for (int i = 1; i <= Number; i++)
            {
                Console.WriteLine("Method1 :" + i); 
            }  
        }
    }

上面的代码在编译的时候是没有问题的,但是运行会报错,因为字符串无法转为整数:

为此要如何避免这种问题呢?

答案是将传递的参数封装到类中 

看具体的例子:

假设我想让多线程执行一个函数DisplayInfo,这个函数有两个参数:

        public void DisPlayInfo(string Name,int Age)
        {
            Console.WriteLine($"\t姓名:{Name}\t\n 年龄:{Age}");
        }

我么可以将参数剥离,并和函数放在同一个类中:

    public class PassParametersToThread
    {
        public int Age { get; set; }
        public string Name { get; set; }=string.Empty;

        public PassParametersToThread(int age,string name)
        {
            Age = age;
            Name = name;
        }

        public void DisPlayInfo()
        {
            Console.WriteLine($"\t姓名:{Name}\t\n 年龄:{Age}");
        }
    }

这样,在执行时,我们向多线程传递的是类PassParameter

PassParametersToThread p = new PassParametersToThread(20, "小红");
Thread t1 = new Thread(p.DisPlayInfo);
t1.Start();

sToThread的成员函数,且没有任何参数。

这样就实现了安全的将参数传递到线程中。

下一篇将介绍如何从线程中获取运算结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值