Thread初学 (一)
Thread学习:
按照学习管理首先就是上命名空间:System.Threading;
声明一个Thread并且启动一个Thread(我把这个线程放在了窗体的load的事件中)
private void Form1_Load(object sender, EventArgs e)
{
Thread threadA = new Thread(new ThreadStart(Console)); //声明一个thread,指//定方法为Console
threadA.Start(); //开始线程
}
void Console()
{
MessageBox.Show("");
}
//注释:这里的ThreadStart是一个代理类型,源代码如:public delegate void ThreadStart();
好了,简单的使用介绍到此为止,下面我要开始了解Thread了。
看看Thread中最长用的属性以及方法吧
关于属性也就是get或者是set,注CurrentThread和ThreadState只可以读取,设置线程的优先级只需要对应到ThreadPriority枚举类型就可以了。
Start()方法,直接用对象调用就可以开启一个线程。
Suspend(),直接用对象调用就可以挂起一个线程。(Thread.Suspend has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. http://go.microsoft.com/fwlink/?linkid=14202)此方法已过时,建议不用。
Resume(),同上,唤醒线程,相当于继续工作。
Sleep(),这个没啥说的。
Interrupt()和Abort()
Interrupt中断处于 Wait Sleep Join 线程状态的线程.
如果线程没有处于这三种状态中的任何一种,此时调用interrupt将没有任何影响,如果处于这三种状态中的任意一种状态时,调用interrupt将会抛出异常,此时一定要手动捕获异常,否则程序将推出。
Abort,此方式是通过ThreadAbortException 这个异常,而终止当前线程。
Join()
这个方法是相当于线程之间的插队操作,将两个线程合并成为一个线程(将同步变成顺序执行),并且插入点就是join被调用处,哪个对象调用join,那么就是将这个对象拆入到另一个方法体中。
例子:
private void button4_Click(object sender, EventArgs e)
{
t = new Thread(delegate()
{
for (int i = 0; i < 11; i++)
{
t1.Join();
MessageBox.Show(i.ToString());
}
});
t.Start();
t1 = new Thread(delegate()
{
for (int i = 11; i < 15; i++)
{
MessageBox.Show(i.ToString());
}
});
t1.Start();
}
}
//输出结果将是11~15然后才是0~10
ps:在以后的学习中会对当前提出的两个过期方法找到替换他们的新方法的,如果有朋友有这方面的经验,希望能不吝赐教。