在C#中切换2个函数

时间:2012-01-16 15:23:53

标签: c#

我有两个这样的功能:

//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秒等等......?

感谢

3 个答案:

答案 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
    }
}