c# 多线程中将函数作为方法传递(多串口并发,单串口保证一发一收机制)

一.首先简单说明多线程。

1.不带参数且无返回值。

public void show()
{
    MessageBox.Show("ss");
}
 Thread thread = new Thread(new ThreadStart(show));
 thread.Start();

2.带一个参数且无返回值。

public void SendGain(float gain)
{
    RS485Helper.SetGain(this, gain);
}

使用的时候:

 Thread thread = new Thread(new ParameterizedThreadStart(SendGain));
 thread.Start(3f);
 

需要说明的是Thread 只能带一个参数,如果是多个参数想用thread,只能将其封装成类。
3.带多参数且有返回值。

public object SendReadCmd(string id,string id2)
{
    RS485Helper.ReadParmeter(this, id,id2);
    return GetCallbackData() ;
}

使用的时候:

task = Task.Factory.StartNew<object>(() => SendReadCmd("ss","ss2"));
return task.Result;

二.将函数作为方法传递。

1.无参数不带返回值

public void Execute(System.Action action)
{
    action.Invoke();
}
public void A()
{
    Console.WriteLine("方法");
}

使用:

Execute(A);

2.带参数不带返回值

public void Execute(System.Action<string,string> action,string data1,string data2)
{
    action.Invoke(data1, data2);
}
public void A(string data1,string data2)
{
    Console.WriteLine(data1+ data2);
}

使用:

Execute(A,"","");

2.带参数带返回值

public void Execute(System.Func<string,string,bool> func,string data1,string data2)
{
   bool a= func(data1, data2);
}
public bool A(string data1,string data2)
{
    Console.WriteLine(data1+ data2);
    return true;
}

使用:

Execute(A,"","");

三.在多线程中将函数作为方法传递

 public void ExecuteTask(Action<object> func, float info1)
 {
     Thread a = new Thread(new ParameterizedThreadStart(func));
     a.Start(info1);
 }
 public void SendGain(object gain)
 {
     lock (obj_lock)
     {
         RS485Helper.SetGain(this,(float)gain);
         MessageViewHelper.Write("完成设置增益");
     }
 }

使用:

ExecuteTask(SendGain, 20f);

这样的好处就是如果很多方法都需要多线程去执行,则无需每个方法都添加多线程。
在实际应用中,如多个半双工通信串口通信时,可以将方法封装到一个类里面,然后软件启动的时候实例化,所有串口可多线程发送命令,单串口发送多个命令时通过lock锁住,保证一发一收机制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yyuanyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值