C#有关线程与计时的问题

现设function();为一个需要执行一段时间的函数。在.net4.5中我写了如下代码,很好地达到了我的目的:Task.Delay(1000);function();…... 现设function();为一个需要执行一段时间的函数。

在.net 4.5中我写了如下代码,很好地达到了我的目的:
Task.Delay(1000);
function();
……

这样的效果是:如果function()在1000毫秒内执行完毕,那就得等够1000毫秒才能执行接下来(……)的部分。如果function执行超过1000毫秒,那么执行完它,就会立刻执行接下来的代码。这是因为Task.Delay()是在另一线程中进行的,不会影响function()的执行;这与Thread.Sleep(1000)不同,Sleep是阻塞当前线程,它会导致function()多执行1000毫秒。

然而不幸的是:.net 4及以下版本是没有Task.Delay()函数的,我就不知道该怎样实现上述代码的效果。

请问,如何才能在.net 4中实现如同.net 4.5中我写的代码一样的功能呢?

谢谢!
展开
 我来答
为啥啊不能重名
推荐于2016-03-21 · TA获得超过459个赞
知道小有建树答主
回答量:889
采纳率:0%
帮助的人:329万
展开全部
static AutoResetEvent _event;
_event = new AutoResetEvent(false); 申请

新起一个线程 thread.sleep(1000)之后 执行 _event.Set();
function的线程 在functions()下面写 _event.WaitOne(); 阻塞

由于 _event.WaitOne(); 会等待 _event.Set(); 执行后才能激活当前线程
就导致 如果小于1000毫秒就会等待 新线程sleep 1000之后执行set
大于1000毫秒 在funtion执行完毕时 由于新线程_event.Set(); 已经执行完毕 则_event.WaitOne();可以直接通过不必阻塞
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式