2012-01-16 104 views
0

我已經2個功能是這樣的:之間切換2功能在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秒等等......?

感謝

+2

這是一個功課題嗎?你想要做什麼,爲什麼? – 2012-01-16 15:26:07

+1

@Zonta:「多線程」標籤在這裏做什麼?你想讓它們在不同的線程上執行嗎? – Tigran 2012-01-16 15:29:29

+3

我建議看看System.Threading.Timer,而不是專門花費大部分時間睡眠的線程。 – 2012-01-16 15:30:02

回答

6

使用非終止while環結合Thread.Sleep()

while (true) 
{ 
    function1(); 
    function2(); 
    Thread.Sleep(30000); 
} 

當然,在一個真正的程序中,你會想要包含一些機制來終止循環。

此外,我會同意上面Dan Bryant的評論。 Sleep很少是問題的最佳解決方案,在這裏計時器看起來更合適。

7

嘗試以下操作:

while (true) 
{ 
    function1(); 
    Thread.Sleep(TimeSpan.FromSeconds(30)); 
    function2(); 
    Thread.Sleep(TimeSpan.FromSeconds(30)); 
} 
+1

我不認爲這正是OP想要的;我認爲第一次睡眠是不必要的。 – 2012-01-16 15:45:02

+1

@AndrewBarber這是我的壞,我確實編輯後,他回答我的帖子,謝謝:) – Br3x 2012-01-16 15:47:11

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 
    } 
} 
+0

那是什麼:'main()*方法'while(true){}'? – Br3x 2012-01-16 15:52:22

+0

它在那裏保持主線程活着。把它拿出來會導致'MyClass'和它使用的'System.Threading.Timer'一起實例化,然後因爲應用程序終止而被終止。我向你保證這個例子是爲了展示你如何使用Timer而設計的。您可以在'while'塊中添加額外的代碼,例如監聽用戶的鍵盤輸入,並在用戶按下'X'時終止。 – 2012-01-16 16:04:25

+1

@Zonta這是一個忙碌的循環來阻止應用程序終止。不要這樣做! – 2012-01-16 16:06:21