2015-04-24 1 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

charles, точно! Спасибо большое! – 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

Этот подход не рекомендуется. Проверьте использование ЦП, и вы увидите, что весь ядро ​​максимизируется до тех пор, пока не закроется 5 секунд, потому что вы используете тысячи или миллионы раз вокруг цикла, делая в основном «ничего». – wardies