我有两个这样的功能:
//Function1
public int function1()
{
...//some code
}
//function2
public double function2()
{
...//some code
}
//Main
public static void Main(string[] args)
{
function1()
function2()
}
在我的Main
方法中,如何先调用function1()
,然后function2()
;然后睡眠 30秒,再次在function1()
之后再次呼叫function2()
;然后睡觉 30秒等等......?
感谢
答案 0 :(得分:7)
尝试以下方法:
while (true)
{
function1();
Thread.Sleep(TimeSpan.FromSeconds(30));
function2();
Thread.Sleep(TimeSpan.FromSeconds(30));
}
答案 1 :(得分:6)
将非终止while
循环与Thread.Sleep()
结合使用。
while (true)
{
function1();
function2();
Thread.Sleep(30000);
}
当然,在实际程序中,您可能希望包含一些终止循环的机制。
另外,我同意丹布莱恩特的评论。 Sleep
很少是问题的最佳解决方案,而计时器在这里似乎更合适。
答案 2 :(得分:2)
您还可以使用System.Threading.Timer实现,以使函数每30秒运行一次。这样就可以保持主线程处于活动状态。
void Main()
{
using (MyClass myClass = new MyClass())
{
while(true)
{
// Do some other stuff here (e.g. UI feedback, capture user input).
}
}
}
public class MyClass : IDisposable
{
System.Threading.Timer _timer;
int _functionNumber = 1;
bool _disposed;
public MyClass()
{
_timer = new System.Threading.Timer(MyMethod, null, 0, 30000);
}
~MyClass()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing && !_disposed)
{
if (_timer != null) _timer.Dispose();
_disposed = true;
}
}
// Timer callback method
private void MyMethod(object state)
{
if (_functionNumber == 1)
{
function1();
_functionNumber = 2;
}
else
{
function2();
_functionNumber = 1;
}
}
//Function1
public int function1()
{
...//some code
}
//function2
public double function2()
{
...//some code
}
}