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

线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。    
   
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。     
Thread (ThreadStart) 初始化 Thread 类的新实例。    
由 .NET Compact Framework 支持。    
    
Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。     
Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。    
由 .NET Compact Framework 支持。   
    
   
   
  我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。   
   
一、不带参数的   
   
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 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

时间: 2024-08-06 20:04:37

c# 多线程 调用带参数函数的相关文章

调用带参数的函数

函数声明语法:public static void 函数名(形参列表){ //注释内容} 函数 声明 时使用的参数,叫做形参 书写语法:数据类型 形参名→ 多个形参之间使用英文逗号分隔 代码示例: static void Test(int a , int b){ //函数体} → 调用 :Test(3 , "abc"); 实参不能标注类型 实参变量名与形参无关 在调用带参数的函数时无论实参是值.变量.表达式,仅需保证实参的数量和类型与形参匹配函数 声明 时使用的参数,叫做形参书写语法:

js循环动态绑定带参数函数遇到的问题及解决方案[转]

今天写原生javascript时,想利用绑定事件实现类似jquery中on方法的功能:于是有了for循环里绑定事件,无意中发现定义类能解决好多问题! 例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

C#多线程运行带参数与返回值函数

用ParameterizedTheradStart委托 带参数的ParameterizedThreadStart委托 public delegate void ParameterizedThreadStart(Object obj) 可以将要传送给线程函数的信息封装为一个对象,然后调用Thread类的以下构造函数: public Thread(ParameterizedThreadStart start) 启动线程时,向其传送一个参数信息对象即可 Thread t  = new Thread(n

调用带参数的线程两种方法

第一种,用无参方法调用代参方法,用线程调用无参方法 第二种,如代码: //带参数的方法 ParameterizedThreadStart pt = new ParameterizedThreadStart(LoadGridView); //加入到线程 Thread thread = new Thread(pt); //允许后台执行 thread.IsBackground = true; //传入参数 thread.Start(""); 有参函数的参数要是object类型例如: priv

C#调用带参数的python脚本

问题描述:使用C#调用下面的带参数的用python写的方法,并且想要获取返回值. def Quadratic_Equations(a,b,c): D=b**2-4*a*c ans=[] ans.append((-b+math.sqrt(D))/(2*a)) ans.append((-b-math.sqrt(D))/(2*a)) return ans C#代码如下: class Program { static void Main(string[] args) { string name = "C

Java反射调用带参数的函数

目前本文中只考虑函数参数为基本类型.包装类型.String类型.其他负责类型,以后再慢慢补充.代码如下: package com.zkn.newlearn.reflect; import java.io.Serializable; /** * Created by zkn on 2016/5/9. */ public class ReflectTest02 implements Serializable{ public void testVariableArgument(String str,c

通过Java发射机制调用可变参数函数

1.获取可变参数的函数 获取可变参数的函数与获取参数类型为数组类型一样. clazz.getMethod("test", Object[].class); 其中Object为可变参数或者数组的数据类型 例如: public void test(String ... params){ ... } 则获取该可变参数的函数如下: Class clazz = Class.forName("com.demo003.MainThread"); Method method = c

shell脚本调用带参数的存储过程

主要有 #!/bin/bash source /etc/profile source ~/.bash_profile ################################################################## #功能描述:调用带有输入参数和输出参数的存储过程 #执行周期:日 # CRONTAB: * 1 * * * * ${prog_path}CALL_PRODEDURE.sh >> ${prog_path}CALL_PRODEDURE.log 2&a

在Java中调用带参数的存储过程

JDBC调用存储过程: CallableStatement 在Java里面调用存储过程,写法那是相当的固定: Class.forName(.... Connection conn = DriverManager.getConnection(.... /** *p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替 *其余地方写法固定 */ CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}"); /*