您的位置:首页 > 编程语言 > C#

如何优雅的控制C#的线程

2017-03-22 09:43 225 查看
一直以来, 没有找到一种比较优雅的控制线程的方式, 今天翻看了一下chrome的书签, 发现以前居然收藏过这样的文章, 呵呵, 果然只收藏是不行的, 还得看.

/// <summary>
/// 使用Event做同步控制
/// 三个Event组合使用就可以产生同Suspend,Resuem,Abort相同的效果
/// 而且你可以控制Abort的时机以及并作出适当的处理
/// 而不是像Thread.Abort一样通过异常的方式结束线程
/// </summary>
static void UseSyncEvent()
{
Console.WriteLine("----------Use  sync event----------");
AutoResetEvent evtPause = new AutoResetEvent(false);
AutoResetEvent evtResume = new AutoResetEvent(false);
AutoResetEvent evtStop = new AutoResetEvent(false);
Thread t = new Thread(
new ThreadStart(() =>
{
//WaitOne(1000),可产生Sleep(1000)相同的效果
//如果eveStop被置位,则立即返回True,跳出循环
//如果等待1000ms超时,则返回False,继续循环
while (!evtStop.WaitOne(1000))
{
//WaitOne(0)可立即判断evtPase有没有被置位
//如果置位,进入暂停状态,等待Resume被置位才会恢复线程执行
if (evtPause.WaitOne(0))
{
//WaitOne()不带参数表示一直等待,直到被置位
evtResume.WaitOne();
}
Console.WriteLine("Now Date:{0}", DateTime.Now);
}
}
));
t.Start();
//暂停线程执行
Console.ReadKey();
evtPause.Set();
Console.WriteLine("Thread suspended");
//继续线程执行
Console.ReadKey();
evtResume.Set();
Console.WriteLine("Thread resumed");
//结束线程
Console.ReadKey();
evtStop.Set();
Console.WriteLine("Thread stopped");
Console.ReadKey();
}


原文链接: http://www.cnblogs.com/bloodish/archive/2011/03/21/1990025.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 多线程