C#向线程中传递多个参数的解决方法(两种)

问题:

对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下):

Thread t = new Thread(new ParameterizedThreadStart(newthread));
t.start(参数);
void newthread(object)
{
.............
}

而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑

void method(int begin,int end)
{
..................
}

解决办法1:新建一个跑方法的类

class myclass
{
private int begin;
public int begin
{
set{this.begin=value;}
}
private int end;
public int end
{
set{this.end=value;}
}
public run()
{
method(begin,end);
}
private method(int begin,int end)
{
...............
}
}

然后新建一个该类实例,赋值之后就可以跑了,代码如下;

myclass c = new myclass();
c.begin=100;
c.end=10000;
Thread t = new Thread(new Threadstart(c.run))
t.start();

2、解决方法2:将数组或集合实例作为参数传入

目前正在做一个多线程的软件,用到了这部分,感觉每次都要新建类,比较麻烦,查了网上主流都是解决方法1中的方法,后来自己琢磨出另一个方法,就是尽管新的线程只能传1个参数进去,但是我们可以传一个集合或者数组类的参数进去,这样就可以解决一次向新线程中传递多个参数的问题了。

同样,对于上面的method的方法,需要传递2个int类型的整数,首先添加一个method方法的重载

void method(object o)
{
//此处对传进来的参数进行处理
int[] p = (int[])o;
//调用原来的method方法
method(p[0],p[1]);
}

再将要传递的参数用数组或集合方式储存起来

int para[]=new int[2]{100,10000};

最后新建线程进行调用

THread t = new Thread(new ParameterizedThreadStart(method))
t.start(para);

这样就可以达到将2个参数传递入线程的目的了。

传递的参数类型也可以用List<>或其他集合,传递进去的这些参数的类型都是相同的,对于不同的类型,可以考虑采用List<object>或者object[] 的方式传进去,在重载的方法中再对参数进行处理即可。

以上所述是小编给大家介绍的C#向线程中传递多个参数的解决方法(两种) ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • C#实现向函数传递不定参数的方法

    本文实例讲述了C#实现向函数传递不定参数的方法.分享给大家供大家参考.具体实现方法如下: using System; class Min{ public int MinVla(params int [] nums){ int m; if (nums.Length == 0){ Console.WriteLine("Error: no arguments."); return 0; } m = nums[0]; foreach ( int val in nums){ if ( val &

  • Android App中使用SurfaceView制作多线程动画的实例讲解

    1. SurfaceView的定义 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI线程的操作和绘制).但是在其他线程中却不能修改UI元素,例如用后台线程更新自定义View(调用View的在自定义View中的onDraw函数)是不允许的. 如果需要在另外的线程绘制界面.需要迅速的更新界面或则渲染UI界面需要较长的时间,这种情况就要使用SurfaceView了.SurfaceView中包含一个Surface

  • C#创建线程带参数的方法

    1.无参数线程的创建 Thread thread = new Thread(new ThreadStart(getpic)); thread.Start(); private void showmessage() { Console.WriteLine("hello world"); } 2.带一个参数的线程 使用ParameterizedThreadStart,调用 System.Threading.Thread.Start(System.Object) 重载方法时将包含数据的对象传

  • C# Main方法的传入参数研究

    我们在使用Main()方法的时候有没有注意过入口参数args的传入传出的值是什么呢?或许这个问题小的都没人注意. 刚刚使用IO命名空间下的,Enveriment.Environment.GetCommandLineArgs();获取观察了一下,就会发现,这里的args参数我们是可以自己修改,也可以由程序返回,同时也可以执行前使用cmd方式传入,也可以固定的方式输入,方法很多,我是菜鸟刚学也就发现了这么一点点,博客园的高手们就是好啊,对我这样的超级大菜鸟还是很包容的,有问题大家就帮帮我,目前主攻文

  • C#往线程里传递参数的方法小结

    传参方式有两种: 1.创建带参构造方法类 传参 2.利用Thread.start(8)直接传参,该方法会接收一个对象,并将该对象传递给线程,因此在线程中启动的方法 必须接收object类型的单个参数. Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托. Thread (ThreadStart) 初始化 Thread 类的新实例. 由 .NET Compact Framework 支持. Thread (

  • C#中的数组作为参数传递所引发的问题

    原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值. 如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果. 如果一个数据在传递过程中不能被改变,就要在构建这个对象的时候就使其值(字段或属性)不被改变. 一.对于简单的参数的控制 1.值类型参数传递 这种情况因为传递的是参数的副本,不影响原始值,

  • C#分析URL参数并获取参数和值对应列表的方法

    本文实例讲述了C#分析URL参数获取参数和值对应列表的方法.分享给大家供大家参考.具体分析如下: 这个C#函数用于分析url中传递的所有参数,输出一个参数名和参数值对应的NameValueCollection列表,经常能用得到 /// <summary> /// 分析 url 字符串中的参数信息 /// </summary> /// <param name="url">输入的 URL</param> /// <param name=

  • C#无限参数的写法

    本文实例讲述了C#无限参数的写法.分享给大家供大家参考.具体实现方法如下: 声明了list<class> paras,添加每一个para,都需要写paras.Add(para),如果能写成paras.Add(para1,para2,...)那就好了 查了一下资料,C#的无限参数关键词是params,List<Class>可以用泛型来代替,再写List<T>的扩展方法 复制代码 代码如下: public static void AddParas<T>(this

  • C#向线程中传递多个参数的解决方法(两种)

    问题: 对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下): Thread t = new Thread(new ParameterizedThreadStart(newthread)); t.start(参数); void newthread(object) { ............. } 而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑 void method(int begin,int end) { ...

  • Mybatis传递多个参数的解决办法(三种)

    小编给大家分享三种方案解决mybatis传递多个参数的问题,具体介绍如下所示: 第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_a

  • JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)

    IE中new Date(strDate)返回无效时间解决方式: 方法一: function getDateForStringDate(strDate){ //切割年月日与时分秒称为数组 var s = strDate.split(" "); var s1 = s[0].split("-"); var s2 = s[1].split(":"); if(s2.length==2){ s2.push("00"); } return

  • PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)

    方法一: 在php中,抓取https的网站,提示如下的错误内容: Warning: file_get_contents() [function.file-get-contents]: failed to open stream: Invalid argument in I:Webmyphpa.php on line 16 打开php.ini文件找到 ;extension=php_openssl.dll ,去掉双引号";" ,重启web服务器即可. apache服务器的话,可以同时启用m

  • jquery.ajax的url中传递中文乱码问题的解决方法

    JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8则可以解决这一问题. 最终指需要修改JQuery的代码,显式

  • Mybatis中传递多个参数的4种方法总结

    前言 现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. 下面给大家总结了以下几种多参数传递的方法. 方法1:顺序传参法 #{}里面的数字代表你传入参数的顺序. 这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错. 方法2:@Param注解传参法 #{}里面的名称对应的是注解 @Param括号里面修饰的名称. 这种方法在参数不多的情况还

  • SpringBoot中的异常处理与参数校验的方法实现

    兄弟们好,这次来跟老铁交流两个问题,异常和参数校验,在说参数校验之前我们先来说异常处理吧,因为后面参数的校验会牵扯到异常处理这块的内容. 异常处理 说到异常处理,我不知道大家有没有写过或者遇到过如下的写法. public void saveUser() { try { // 所有的业务内容,目测几百行 }catch (Exception e) { e.printStackTrace(); } } 如果出现上述的代码,里面包含了大量的业务代码,如果是你写的,赶紧改掉,不是你写的找写的,吐槽赶紧改掉

  • Python requests.post()方法中data和json参数的使用方法

    目录 json和dict requests.post() post请求中json和data的区别 json和dict python中的dict类型要转换为json格式的数据需要用到json库: import json <json> = json.dumps(<dict>) <dict> = json.loads(<json>) 需要注意的是: python中并没有json类型这一说法,通过json.dumps(<dict>)转换的字典对象,最后得

  • springboot中不能获取post请求参数的解决方法

    问题描述 最近在做微信小程序,用的spring boot做后端,突然发现客户端发送post请求的时候服务端接收不到参数.问题简化之后如下: 微信小程序端: 在页面放一个按钮进行测试 <!--index.wxml--> <view class="container"> <button catchtap='testpost'>点击进行测试</button> </view> 绑定一个函数发送post请求 //index.js //获

  • 微信小程序实现带参数的分享功能(两种方法)

    微信小程序分享功能的实现方法有两种: 第一种 在page.js中实现onShareAppMessage,便可在小程序右上角选择分享该页面 onShareAppMessage: function () { return { title: '弹出分享时显示的分享标题', desc: '分享页面的内容', path: '/page/user?id=123' // 路径,传递参数到指定页面. } } 第二种 自定义按钮实现分享,在page中添加一个带有open-type='share'的button标签

随机推荐