最详细的介绍了两种
http://www.cnblogs.com/xiaoyaozhe/archive/2011/11/10/2244110.html
http://www.cnblogs.com/lenovo_tiger_love/archive/2010/01/07/1641206.html
一、 最常见的就是使用参数为 ThreadStart类型的线程构造函数
Thread t = new Thread(new ThreadStart(FunctionName));
可以写成 Thread t = new Thread(FunctionName); 这就是最基本的创建线程方法。但是ThreadStart是无参数的委托类型,这种方法也就不能直接给线程函数传递参数。但是线程函数可以直接访问他所在的类中的其他成员变量,参数可以设置在其他成员变量中,让线程函数去读取。
二、 使用参数为 ParameterizedThreadStart类型的线程构造函数
Thread t = new Thread(new ParameterizedThreadStart(FunctionName));
ParameterizedThreadStart也是一个委托类型,其委托的函数必须带一个object类型的参数。虽然只带一个object类型参数,但是可以把N个参数都包装进一个类对象,通过这个object参数直接把该对象传给线程,也就相当于传了N个参数,不过多了包装这步。
线程池
using System;
using System.Threading;
class ThreadTest
{
public static void Main(){
MyThread mt=new MyThread();
//Thread t0=new Thread(new ThreadStart(method1));
//Thread t1=new Thread(new ThreadStart(method2));
//Thread t2=new Thread(new ThreadStart(mt.method3));
//t0.Start();
//t1.Start();
//t2.Start();
//以上注释掉的就是正常线程创建与使用的方法
//以下是使用线程池进行系统自动管理后台线程
ThreadPool.QueueUserWorkItem(new WaitCallback(method1));
ThreadPool.QueueUserWorkItem(new WaitCallback(method2));
ThreadPool.QueueUserWorkItem(new WaitCallback(mt.method3));
//因为线程池创造线程属于守护线程,前台停止自然后台也停止,所以
//使用ReadLine()阻塞,查看结果
Console.ReadLine();
}
public static void method1(Object stateInfo){
//使用线程池必备参数Object
//没有这个参数使用线程池编译不过,应该是发送前台消息的一个参数
for(int i=0;i<1000;i++)
{
Console.Write("a");
Thread.Sleep(10);
}
}
public static void method2(Object stateInfo){
for(int i=0;i<1000;i++){
Console.Write("b");
Thread.Sleep(10);
}
}
}
class MyThread{
public void method3(Object stateInfo){
for(int i=0;i<1000;i++){
Console.Write("C");
}
}
}
给线程传递参数:
ThreadPool.QueueUserWorkItem(callBack,
"Decrease stock of monkey wrench");
分享到:
相关推荐
例如: for (int i = 0; i ; i++) { ...如何关闭其中的一个线程呢? 请下载解决方案。 呵呵,这个实例10分值的买, 觉得好的话就评个分吧,评分后会返回你11分 (一定要评分,光评论是不返分的)
WinForm C# 多线程编程并更新界面(UI) 在 Windows 窗体应用程序中,多线程编程是非常重要的,这样可以提高应用程序的响应速度和用户体验。下面我们来讨论如何在 WinForm 中使用 C# 实现多线程编程并更新界面(UI...
1. **BackgroundWorker组件**:这是.NET Framework提供的一种简单易用的多线程解决方案,适合在UI线程中启动,并在工作线程上执行任务。BackgroundWorker提供了ProgressChanged和RunWorkerCompleted事件,可以在UI...
在这个例子中,`RunWithParameter`方法启动线程并传递一个对象`data`作为参数。`RunTask`方法接收一个`object`类型的参数,并进行类型转换以获取实际值。 除了使用`Thread`类直接创建线程,C# .NET Framework 4.0及...
C#多线程实现定时器 C#多线程实现定时器是指使用C#语言中的多线程编程技术来实现定时器功能。定时器是指在一定的时间间隔内执行某个操作或函数的机制。在C#中,可以使用System.Windows.Forms.Timer控件来实现定时器...
//启动线程 } void threadMethod() { Action<string> AsyncUIDelegate = delegate(string n) { label1.Text = n; }; label1.Invoke(AsyncUIDelegate, new object[] { "修改后的label1文本" }); } ``` 在...
创建一个新的线程可以使用Thread类的构造函数,传入一个委托作为线程启动时要执行的方法。例如: ```csharp Thread thread = new Thread(new ThreadStart(YourMethod)); thread.Start(); ``` 在这里,`YourMethod`...
本文将深入探讨“C#内存释放-线程控制-线程启动-线程暂停”这一主题,结合提供的WFormsThread文件,我们可以假设这是一个关于Windows Forms应用程序中线程管理的实例。 首先,让我们关注线程控制。在C#中,我们通常...
回到“c#.net写的调用多线程小程序”的主题,这个小程序可能利用了以上的一种或多种技术,来实现同时启动多个应用程序。例如,它可能为每个要启动的应用程序创建一个`Thread`,并在每个线程中调用`Process.Start`...
《C#多线程编程实战(原书第二版)源码》是一本深入探讨C#中多线程技术的专业书籍,其源码提供了丰富的实践示例,帮助读者掌握并发编程的核心概念和技术。在C#中,多线程是实现高性能、响应式应用程序的关键组成部分...
例如,创建一个新的线程并启动它,可以这样写: ```csharp Thread thread = new Thread(new ThreadStart(YourMethod)); thread.Start(); ``` 在这里,`YourMethod`是你希望在线程中执行的方法。此外,C#还提供了`...
在C#中,多线程是程序设计中的一个重要概念,它允许程序同时执行多个操作,从而提高程序的效率和响应性。然而,在某些情况下,我们可能需要终止正在运行的所有线程,这通常发生在应用程序需要关闭或者某个关键错误...
2. **线程启动与同步**:`Start`方法用于启动线程,而`Join`方法则用于等待线程完成。为了防止数据竞争,可能需要使用锁(如`Monitor`类,`Mutex`,或`Semaphore`)进行线程同步,确保在多线程环境中正确地访问共享...
通过实例化`Thread`类并传入一个委托(如方法)作为参数,可以启动新线程执行特定任务。 - **线程同步**:为了避免多线程间的数据冲突,C#提供了`Mutex`、`Semaphore`、`Monitor`等同步机制,以及`lock`关键字,...
在`Form1`中,我们可以这样启动新线程并调用`CrossThreadAddNum`: ```csharp public partial class Form1 : Form { private Cross _cross; public Form1() { InitializeComponent(); _cross = new Cross...
1. **Thread 类**:这是C#中最基础的多线程组件,通过创建Thread对象并调用其Start方法来启动新线程。线程可以有自己的执行入口点,也可以通过参数化构造函数传递数据到线程函数。 2. **线程同步和互斥**:在多线程...
- **启动线程**:调用`Thread.Start()`方法启动线程。 - **线程同步**:`Mutex`, `Semaphore`, `Monitor`等类用于控制线程间的同步,防止数据竞争问题。 - **线程池**:C#提供`ThreadPool`类,用于管理和复用线程...
本文实例讲述了C#多线程与跨线程访问界面控件的方法。分享给大家供大家参考。具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象。启用新线程去访问WebService是一个可行的方法...
3. 启动线程:`thread.Start();` 4. Task类创建并启动任务:`Task.Run(() => SendData());`,SendData是任务执行的方法。 四、C# UDP多线程发送 1. 创建发送线程,负责不断向目标地址发送UDP数据。 2. 需要注意同步...
2. `Start()`方法:创建线程后,调用`Start()`方法启动线程执行。 3. `Join()`方法:等待指定的线程完成。如果在主线程中调用,会阻塞主线程直到子线程结束。 4. `IsAlive`属性:检查线程是否仍在运行。 二、委托 ...