C# 子线程 传值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 子线程 传值相关的知识,希望对你有一定的参考价值。

我有个串口通讯类.专门负责收发串口数据的(SerialPort)
. 另外我有一个通讯窗口FORM..(MainForm)
.通讯窗口 开辟子线程发送数据
SerialPort.SendCmd= "要发送的命令";
Thread tThread = new Thread(new ThreadStart(SerialPort.Send))

SerialPort的接收方法 已绑定
当收到信息后会触发接收事件DataReceived
此时在子线程里可以 获得 读到的结果..
SerialPort.result中
这时候 怎么把读到的结果传回 FORM呢?..
匿名代理
构造一个具有返回值的线程委托。

可以详细点吗?.感谢~

感谢 西三227 ..
如果需要的话.
留下email..我发你我写了一半的程序也可以

构造一个具有返回值的线程委托。using System;
using System.Collections.Generic;
//using System.Linq;我用的是VS2010.
using System.Text;
using System.Threading;

namespace ConsoleApplication1

class Program

static void Main(string[] args)

MyThread obj = new MyThread();
//设定线程函数参数
obj.x = 100;
obj.y = 200;
//创建线程对象
Thread th = new Thread(new ThreadStart(obj.ThreadMethod));
//启动线程
th.Start();
//主线程干其他事
th.Join(); //等待辅助线程结束
//取回线程结果
Console.Write(obj.returnValue);



class MyThread

public int x;
public int y;
public long returnValue;

public long SomeFunc(int x, int y)

long ret = 0;
//使用x和y完成一些工作
return ret;


public void ThreadMethod()

returnValue = SomeFunc(x, y);


参考技术A 当然是果断的调用窗体的Invoke()方法啦
mainFrom.Invoke(method,pars)

第一个参数是委托,你想执行什么方法就先自己定个委托然后传过去,如果你的方法有参数的话就用第二个参数传...

如果你嫌麻烦可以直接在MainFrom中定义一个public的方法,然后mainFrom.xxxx()直接调用
参考技术B 有个叫线程池的东西 存线程间的变量 参考技术C 你在构造线程的时候需要把form传入。
你自己写一个线程类吧。

java 两个子线程怎么传值线程传值

把一个子线程A 中的数组传到另一个线程B 中在B 中用的时候老是报空指针异常

参考技术A 用管道可能你不太熟悉,也可以用一个折中办法:这两个线程如果出自一个母类体生成并.start的话,可以在母类体中设置一个全局的数组变量,把母类体当成传输中介,就可以了。一定能传到。希望能对你有帮助。 参考技术B 也可以用全局变量,数据库传值,伺情况而定 参考技术C 用管道

以上是关于C# 子线程 传值的主要内容,如果未能解决你的问题,请参考以下文章

C#子线程执行完后通知主线程(转)

c# mdi父子窗口,传值问题

java 两个子线程怎么传值线程传值

子线程如何获取父线程ThreadLocal的值

京东一面:子线程如何获取父线程 ThreadLocal 的值?我蒙了。。。

java中开启子线程后主线程中传入的变量不变