2015-04-24 71 views
1

我得到了这样的事情:如何在X秒后终止功能?

void func() 
{ 
    int a = int.Parse(system.readline.console()); 
} 

但我想这个功能设置为5秒后,例如完成,即使用户没有将任何东西。我怎样才能做到这一点?

我想过这样的事情:

void func() 
{ 
    System.Timers.Timer timer = new Timer(); 
    timer.Interval = 5000 
    timer.Elapsed += SomeFunc; 
    timer.Start() 
    int a = int.Parse(system.console.readline()); 
} 
void SomeFunc(object sender, EventArgs args) 
{ 
    Thread.CurrentThread.Abort(); 
} 

但它看起来太丑陋了。另外,我不想中止所有的线程,只是打破这个功能。我不想为此功能创建另一个线程。

+0

答案取决于原有功能的实现。 'func'是实际的代码吗?或者你有不同的? –

+2

如果真的只是从控制台读取,请看看http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline –

+0

查尔斯,确切地说!非常感谢! – arielttt0

回答

-2

这似乎为我工作

var dt = DateTime.Now; 
var s = string.Empty; 
while ((DateTime.Now - dt).TotalSeconds < 5) 
{ 
    if (Console.KeyAvailable) 
     s += Console.ReadKey().KeyChar; 
} 
+0

你能在5秒的时间内终止吗?它会返回一个int吗? – Carsten

+1

不建议使用此方法。检查CPU的使用情况,你会看到整个内核在5秒钟之前都处于最大状态,因为你在循环周围运行数千次/几百万次,大部分时间是“没有”。 – wardies