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

news2024/11/26 0:25:18

        在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的成员函数,且没有任何参数。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC-day04(数据库事务)

六&#xff1a;数据库事务 1.数据库事务介绍 事务&#xff1a;一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有事务都作为一个工作单元来执行&#xff0c;即使出现了故障&#xff0c;都不能改变这种执行…

使用Swift开发Framework遇到的问题及解决方法

文章目录 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 Cannot load module xxx built with SDK ihphoneos16.4 when using SDK iphoneos17.0:XXX/xxx.framework/Modules/xxx.swiftmodule/arm64-appl…

公司要做大数据可视化看板,除了EXCEL以外有没有好用的软件可以用

当企业需要进行大数据可视化看板的设计和开发时&#xff0c;除了Excel&#xff0c;还有许多其他强大且适合大数据可视化的软件工具。以下是几种常用的好用软件&#xff0c;以及它们的特点和优势&#xff0c;供您参考。 一、Datainside 特点和优势&#xff1a; - **易于使用**…

一文讲清楚密评中的数据库存储加密 安当加密

密评对数据库存储加密的要求&#xff0c;主要包括对数据加密的要求和密码算法、密钥管理系统、密码应用子系统和密码安全防护机制等密码协议的要求。 首先&#xff0c;对于数据加密的要求&#xff0c;数据库加密技术应能够提供足够的数据安全性&#xff0c;保证数据在存储、传输…

Android Studio gradle手动下载配置

项目同步时&#xff0c;有时候会遇到Android Studio第一步下载gradle就是连接失败的问题。 这种情况&#xff0c;我们可以手动去gradle官网下载好gradle文件&#xff0c;放置在Android Studio的缓存目录下&#xff0c;这样AS在同步代码时就会自动解压下载好的文件。 步骤如下&…

安装Ubuntu玩玩

闲着没事儿&#xff0c;装个linux系统玩玩。听说乌班图系统比较火&#xff0c;那咱就玩玩这个。 1、下载一个比较小的系统 ubuntu系统下载_ubuntu linux最新版系统免费下载 - 系统之家 2、下载完后用虚拟机一键式安装。版本18.10 界面还是很简洁美观 3、安装ssh。 &#x…

Go语言函数和包介绍

函数 什么是函数&#xff1f; 函数是执行特定任务的代码块。函数接受输入&#xff0c;对输入执行一些计算&#xff0c;然后生成输出。 通常每一个程序都包含有很多的函数&#xff0c;系统通过函数来划分不同功能&#xff0c;将整体任务进行分解。 在 Go 语言中&#xff0c;…

Idea使用技巧——导包优化,新版idea界面取消,界面字体放大缩小

导包优化 on the fly 翻译为立刻 第一个表示&#xff0c;如果导入的包没有冲突&#xff0c;会自动帮你导入。如果输入List 无需手动altenter 第二个表示&#xff0c;没有引用的包&#xff0c;会自动删除。这个对于代码整洁尤其适用。相当于ctrlalto的功能 新版idea的界面取消 …

Uniapp 入门

创建项目 参考&#xff1a;uni-app创建新页面和页面的配置_uniapp多页面配置-CSDN博客 添加页面 添加路由 显示效果 网址&#xff1a;http://localhost:8080/#/pages/task/taskDetails 参考&#xff1a;uni-app官网 在 HBuilder X 使用命令行引入 uni-ui npm i dcloudio/un…

微软和OpenAI正在开发AI芯片, 并计划下个月发布

今年初&#xff0c;Chat**引起了无数网友关注&#xff0c;一度成为了热门话题。这是由人工智能研究实验室OpenAI开发的一款聊天机器人模型&#xff0c;也称为一种人工智能&#xff08;AI&#xff09;技术驱动的自然语言处理工具。能够通过学习和理解人类的语言来进行对话&#…

中国移动 OneNET 免费的物联网平台

中国移动 OneNET 物联网平台提供免费的设备连接通信服务。 01 中移 OneNET 物联网平台 中国移动 OneNET 定位为 PaaS 服务&#xff0c;即在物联网应用和真实设备之间搭建高效、稳定、安全的应用平台&#xff1a;面向设备&#xff0c;适配多种网络环境和常见传输协议&#xff0c…

Element UI库 之 el-input 赋值后不能删除,修改,输入

最近做了一个需求就是导入数据的&#xff0c; 导入了之后发现打折跟促销价都发不能修改了&#xff0c; 甚至删除都不行。后面去查了下发现大概是数据响应的问题。大概的解决办法有下面几个&#xff0c;我是用最后一个解决的 方法一&#xff1a;强制更新 在绑定input里面的调用…

buuctf week2-web-Upload again!

尝试传修改后缀的普通一句话木马&#xff0c;被检测 尝试传配置文件 .htaccess 和 .user.ini 两个都传成功了 接下来继续传入经过修改的木马 GIF89a <script language"php"> eval($_POST[cmd]); </script> 没有被检测&#xff0c;成功绕过 直接上蚁剑…

git cherry-pick 合并某次提交

一、无冲突的情况 1、合并其它分支某次提交 切换到主分支&#xff0c;想把其他分支的某次commit修改 合并到主分支上&#xff0c; 可以用 git cherry-pick 命令 比如&#xff0c;其它分支&#xff0c;某次提交的commit Hash 是30e48158badc39801f1ce3cb375a07b872d6f220 &a…

手机投屏之WFD简介

一、概述 1.1 简介 Miracast是由Wi-Fi联盟于2012年所制定&#xff0c;以Wi-Fi直连&#xff08;Wi-Fi Direct&#xff09;为基础的无线显示标准。支持此标准的消费性电子产品&#xff08;又称3C设备&#xff09;可透过无线方式分享视频画面&#xff0c;例如手机可透过Miracast将…

Semaphore使用以及原理

Semaphore使用以及原理 介绍原理使用场景使用方法Demo 介绍 Semaphore&#xff08;信号量&#xff09;是一种用于控制并发访问资源的机制。它可以用于多线程或多进程环境中&#xff0c;用于保护共享资源的访问&#xff0c;避免竞争条件和死锁。 原理 Semaphore维护一个计数器…

c#画五角星

c#画一个五角星,最重要的就是计算哪些坐标点出来,也是最难的一部分,这要涉及到一些数学方面的知识.对数学坐标知识不是很熟的人,如果想学画图,我建议多去看一下数学书,对我们写程序的人来说是没有什么坏处可言的. 想学习的朋友可以一起学习,我觉得分享学习是一种快乐,所以把自…

mysql主从工作原理、搭建

目录 一、mysql为什么要用主从架构&#xff1f; 二、mysql数据库主从复制原理是什么&#xff1f; 详细的主从复制过程如下图&#xff1a; 主从复制过程概述&#xff1a; 三、mysql主从如何搭建&#xff1f; 本次安装的数据库版本为mysql5.7 1、准备两台服务器&#xff08…

C++ 设计模式 —— 组合模式

C 设计模式 —— 组合模式 0. 引用连接 本文主要的思路和代码&#xff0c;来自于对以下连接的学习和实现&#xff1a; 组合模式 1. 引言 1.1 什么是组合模式&#xff1f; 组合模式的定义组合模式的作用 组合模式是一种行为型设计模式&#xff0c;它将对象组合成树形结构以…

解决react使用css module无法重写bootstrap样式的问题

react使用css module虽然能够解决样式污染&#xff0c;但是同时也失去了写css样式的灵活性&#xff0c;特别是&#xff1a;在.module.css文件中当子元素是非变量的静态class类&#xff08;比如bootstrap&#xff09;, 此时使用css选择器对该子元素的样式不会起作用的 比如下面…