C#多线程参数传递
作者:网络转载 发布时间:[ 2016/5/24 11:05:20 ] 推荐标签:C# .NET
1、通过实体类来传递(可以传递多个参数与获取返回值),demo如下:
需要在线程中调用的函数:
namespace ThreadParameterDemo
{
public class FunctionClass
{
public static string TestFunction(string name, int age)
{
//内部处理省略
return name + " 的年龄是:" + age;
}
}
}
通过实体来来封装:
namespace ThreadParameterDemo
{
///
/// 过渡类
///
public class TransitionalClass
{
private string name = string.Empty;
private int age;
public string acceptResults = string.Empty;
public TransitionalClass(string name, int age)
{
this.name = name;
this.age = age;
}
public void TestFunction()
{
acceptResults = FunctionClass.TestFunction(this.name, this.age);
}
}
}
调用:
private void Form1_Load(object sender, EventArgs e)
{
//实例化ThreadWithState类,为线程提供参数
TransitionalClass tc = new TransitionalClass(" Jack", 42);
// 创建执行任务的线程,并执行
Thread t = new Thread(new ThreadStart(tc.TestFunction));
t.Start();
//获取返回值,通过 tc.acceptResults;
}
小注:
必须注意IsBackground的问题,如果IsBackground为false的,则Windows程序在退出的时候,不会为你自动退出该线程。也是实际上你的应用程序未结束。
MSDN推荐:多线程方法调用提供参数的好办法是将目标方法包裹在类中,并为该类定义字段,这些字段将被用作新线程的参数。
这种方法的优点是,任何时候想要启动新线程,都可以创建类的新实例,该实例带有自身的参数。
BackgroundWorker 类
ThreadStart中的函数是没有返回值和参数的
2、异步调用中的参数和返回值
能完美解决参数和返回值的是使用异步调用的方式。异步调用和Thread相比,一个大的劣势是不能控制其优先级。
具体代码如下:
public delegate string delegateFunction(string name,int age);//委托
delegateFunction df;
private void Form1_Load(object sender, EventArgs e)
{
//指向需要调用的方法
df = new delegateFunction(FunctionClass.TestFunction);
string name = "my name";//输入参数
int age = 19;
IAsyncResult result = df.BeginInvoke(name,age, null, null);
string myResult = df.EndInvoke(result);//用于接收返回值
MessageBox.Show(myResult);
}
简化:
public Func df;//委托
private void Form1_Load(object sender, EventArgs e)
{
//指向需要调用的方法
df += FunctionClass.TestFunction;
string name = "my name";//输入参数
int age = 19;
IAsyncResult result = df.BeginInvoke(name, age, null, null);
string myResult = df.EndInvoke(result);//用于接收返回值
MessageBox.Show(myResult);
}
小注:
通过这种方式生成新线程是运行在后台的(background),优先级为normal
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11