C#实现不影响当前线程情况下间隔一定的时间执行一段代码

大家知道C#间隔一定时间去执行一段代码,常用的有

1. Thread.Sleep(多少毫秒);

2. 使用Timer控件间隔一定的时间,设置执行一次

以上两种方法,实现起来不难,弊端在于会阻塞当前线程,界面会卡住,不友好

下面介绍一种更好的方式,

//隔设定的时间在执行代码 
                    Task.Factory.StartNew(() =>
                    {
                        System.Threading.Thread.Sleep(5000);
                        //要执行的代码段
               …… });

Task是Net4.0 新加入的,用来替代ThreadPool,调用ThreadPool的QueueUserWorkItem这个技术存在许多限制。其中最大的问题是没有一个内建的机制让你知道操作在什么时候完成,也没有一个机制在操作完成是获得一个返回值,Microsoft为了克服这些限制(同时解决其他一些问题),引入了任务(tasks)的概念。

Task两种调用方式:
Task.Factory.StartNew(
() =>
{


Console.WriteLine("任务开始工作……");
//模拟工作过程
Thread.Sleep(1000);
}
);


二:
Task t = new Task(() =>
{
while (!cts.Token.IsCancellationRequested)
{
Console.WriteLine("任务开始工作……");
//模拟工作过程
Thread.Sleep(1000);
}


});
t.Start();


t.ContinueWith((task) =>
{
Console.WriteLine("任务完成,完成时候的状态为:");
});


cts.Token.Cancel();

 

posted @ 2017-03-24 22:48  产卵的鱼  阅读(4727)  评论(0编辑  收藏  举报