引用:https://blog.csdn.net/shuaihj/article/details/41316731

一、不带参数创建Thread

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading; namespace ATest
{
class A
{
public static void Main()
{
Thread t = new Thread(new ThreadStart(A));
t.Start(); Console.Read();
} private static void A()
{
Console.WriteLine("不带参数 A!");
}
}
}

  结果显示“不带参数 A!”

二、带一个参数创建Thread

由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。

 using System;
using System.Collections.Generic;
using System.Text;
using System.Threading; namespace BTest
{
class B
{
public static void Main()
{
Thread t = new Thread(new ParameterizedThreadStart(B));
t.Start("B"); Console.Read();
} private static void B(object obj)
{
Console.WriteLine("带一个参数 {0}!",obj.ToString ());
}
}
}

结果显示“带一个参数 B!”

三、带多个参数创建Thread

由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,可以基于第二种方法,将参数作为类的属性传给线程。

 using System;
using System.Collections.Generic;
using System.Text;
using System.Threading; namespace CTest
{
class C
{
public static void Main()
{
MyParam m = new MyParam();
m.x = ;
m.y = ; Thread t = new Thread(new ThreadStart(m.Test));
t.Start(); Console.Read();
}
} class MyParam
{
public int x, y; public void Test()
{
Console.WriteLine("x={0},y={1}", this.x, this.y);
}
}
}

结果显示“x=6,y=9”

四、利用回调函数给主线程传递参数   
   我们可以基于方法三,将回调函数作为类的一个方法传进线程,方便线程回调使用。

 using System;
using System.Collections.Generic;
using System.Text;
using System.Threading; namespace CTest
{
class C
{
public static void Main()
{
MyParam m = new MyParam();
m.x = ;
m.y = ;
m.callBack = ThreadCallBack; Thread t = new Thread(new ThreadStart(m.Test));
t.Start(); Console.Read();
}
} private void ThreadCallBack(string msg)
{
Console.WriteLine("CallBack:" + msg);
} private delegate void ThreadCallBackDelegate(string msg); class MyParam
{
public int x, y;
public ThreadCallBackDelegate callBack; public void Test()
{
callBack("x=6,y=9");
}
}
}

结果显示“CallBack:x=6,y=9”

【转载】在C#中主线程和子线程如何实现互相传递数据的更多相关文章

  1. vc中主线程等待子线程退出的方法

    VC线程同步,在子线程中等待另一子线程结束,通过WaitForSingleObject可以实现,但是如果在主线程中等待子线程结束,这个函数是无法完成要求的,因为它会造成主线程挂起,导致程序死掉.我们可 ...

  2. 在C#主线程和子线程将数据传递给对方如何实现

    在C#中主线程和子线程怎样实现互相传递数据 老帅 在C#中创建线程Thread时,能够有多种方法,而主线程和子线程之间又怎样实现互相传递数据,每种创建方法传递參数的效果是不同的,逐一看一下:  一.不 ...

  3. Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  4. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

  5. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  6. (转)C#/.NET主线程与子线程之间的关系

    一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程.       有的博客上说“至少一个主线程”,这一说法持有怀疑         主线程与子线程之间的关系        ...

  7. Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解

    MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...

  8. C#主线程等待子线程运行结束

    佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...

  9. Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息

    MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...

随机推荐

  1. SpannableString与SpannableStringBuilder使用

    转自:http://blog.it985.com/14433.html1.SpannableString.SpannableStringBuilder与String的关系 首先SpannableStr ...

  2. MD5简单实例

    如图当点击按钮时,会先判断是否第一次登陆,如果是第一次登陆登陆则会弹出设置密码的弹窗,若果登陆过则弹出登陆弹窗 其中输入的密码会用MD5加密下 package com.org.demo.wangfen ...

  3. MySQL Database on Azure 支持 5.7 版本啦!

    MySQL Database on Azure 目前已经全面开放对 5.7 的支持.您可以通过管理门户,在 MySQL 数据库服务器创建时选择 5.7 版本进行体验.MySQL 5.7 版本目前是 M ...

  4. mysql导入导出csv

    LOAD DATA local INFILE '/tmp/stb.csv' INTO TABLE stb FIELDS TERMINATED BY ',' enclosed by '"' l ...

  5. SQL Server 2012安装配置(Part2 )

    2 服务器安装 运行安装程序后,首先进入 SQL Server 安装中心.选择左侧导航树中的"安装"菜单项. 图2-1 SQL Server 安装中心 在右侧菜单中点击" ...

  6. SqlServer50条常用查询语句

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  7. 真的有用吗?(GitHub)

    为什么要新建一个GitHub账号   一个程序员不知道GitHub,那我就笑笑,呵呵哒.什么是GitHub呢? 就我知道的git,谈一下.Git是一个版本控制软件,这个软件最初是Linux之父林纳斯. ...

  8. 第3次Scrum冲刺

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  9. 设计模式——原型模式(Prototype Pattern)

    原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象. UML 图: 原型类: package com.cnblog.clarck; /** * 原型类 * * @author c ...

  10. STL - rope 【强大的字符串处理容器】

    包含头文件: #include<ext/rope> using namespace __gnu_cxx; 申请: rope text; 基本操作: test.push_back(x); / ...