- UID
- 25837
注册时间2006-10-5
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
.net框架的System.Threading命名空间提供了一些可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked、AutoResetEvent 等)外,此命名空间还包含一个 ThreadPool 类(它允许用户使用系统提供的线程池)和一个 Timer 类(它在线程池线程上执行回调方法)。
以Thread类来说明,在MSDN说明如下:
Thread 类 [C#]:
创建并控制线程,设置其优先级并获取其状态。
有关此类型所有成员的列表,请参阅 Thread 成员。
System.Object
System.Threading.Thread
[Visual Basic]
NotInheritable Public Class Thread
[C#]
public sealed class Thread
[C++]
public __gc __sealed class Thread
[JScript]
public class Thread
线程安全
该类型对于多线程操作是安全的。
备注
一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。使用 ThreadStart 委托指定由线程执行的程序代码。
在线程存在期间,它总是处于由 ThreadState 定义的一个或多个状态中。可以为线程请求由 ThreadPriority 定义的调度优先级,但不能保证操作系统会接受该优先级。
GetHashCode 提供托管线程的标识。在线程的生存期内,无论获取该值的应用程序域如何,它都不会和任何来自其他线程的值冲突。
注意 操作系统 ThreadId 和托管线程没有固定关系,这是因为非托管宿主能控制托管与非托管线程之间的关系。特别是,复杂的宿主可以使用 CLR Hosting API 针对相同的操作系统线程调度很多托管线程,或者在不同的操作系统线程之间移动托管线程。
看个最简单的例子:
1、新建立个Windows应用程序,在Form1窗体上添加三个按钮。
2、在 Form1.cs类下的开始位置加上声明:using System.Threading;
3、在Form1类中加上:
public void MyThread1()
{//线程1
MessageBox.Show("线程一,可以不用关闭当前对话框就执行程序其他功能。","系统提示",MessageBoxButton.Ok,MessageBoxIcon.Information);
}
public void MyThread2()
{//线程2
MessageBox.Show("线程二,可以不用关闭当前对话框就执行程序其他功能。","系统提示",MessageBoxButton.Ok,MessageBoxIcon.Information);
}
4、在个Button的事件代码如下:
private void button1_Click(object sender, System.EventArgs e)
{//线程一
Thread MyThread=new Thread(new ThreadStart(MyThread1));
MyThread.Start();
}
private void button2_Click(object sender, System.EventArgs e)
{//线程二
Thread MyThread=new Thread(new ThreadStart(MyThread2));
MyThread.Start();
}
private void button3_Click(object sender, System.EventArgs e)
{//普通模式
MessageBox.Show("必须关闭当前对话框,才可以执行程序的其他功能","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
// 备注: Start()方法,是将导致操作系统将当前实例的状态更改为ThreadState.Running.
转自:http://blog.csdn.net/DVD_01/archive/2006/05/12/725445.aspx |
|