2013-05-10 44 views
0

我創建了一個使用蜂鳴控制檯的簡單C#應用程序。我想添加一個停止按鈕來停止蜂鳴聲,但是一旦應用程序開始運行,它不會讓我點擊關閉/按鈕按鈕。以下是我的代碼。c#停止按鈕用於發出蜂鳴聲

private void button1_Click(object sender, EventArgs e) 
{ 
    int int1, int2, hours; 

    int1 = int.Parse(txtbox1.Text); 
    int2 = int.Parse(txtbox2.Text); 

    hours = ((60/int1) * int2); 
    for (int i = 0; i <= hours; i++) 
    { 
     Console.Beep(); 
     Thread.Sleep(int1 * 60000); 
    } 
} 
+0

將Timer()添加到您的窗體並設置其Interval()屬性。從那裏處理Tick()事件和Beep()。您可以使用Start()和Stop()開始和停止計時器。 – 2013-05-10 23:50:14

+0

@Idle_Mind,這是一個好主意,但你應該花更多的時間,而不是一個回答。 – 2013-05-10 23:51:00

+0

感謝Kirk的想法。我本來應該出門,所以我只是寫得很快! – 2013-05-11 03:32:43

回答

0

原因是您在GUI線程中執行button1_Click。當你調用這個方法時,線程會在的相當一段時間卡在那裏因爲你讓它睡覺。

如果您刪除Thread.Sleep(int1*60000);,您會注意到您的應用程序在發出嗶嗶聲之前沒有響應。

您應該嘗試改爲使用Timer。像這樣的東西應該工作(這是基於Windows.Forms.Timer):

private Timer timer = new Timer(); 

,並設置了

timer.Tick += OnTick; 
timer.Interval = int1 * 60000; 
... 


private void OnTick(object o, EventArgs e) 
{ 
    Console.Beep();  
} 

在你buttonclick你現在能夠啓動和停止計時器:

timer.Start(); 

timer.Stop(); 
0

我會在這種情況下使用一個計時器,爲什麼你不能關閉窗體的原因是因爲你正在從我所瞭解的窗體線程上調用睡眠。在表單線程中調用睡眠會給應用程序崩潰的印象。

這是我用C#編寫的一個快速示例代碼,它會在給定的時間發出提示音。我希望它有幫助。

private void button1_Click(object sender, EventArgs e) 
    { 

     timer1.Tick += new EventHandler(timer_dosomething); 
     timer1.Interval = 60000; 
     timer1.Enabled = true; 
     timer1.Start(); 

    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     timer1.Stop(); 
    } 

    void timer_dosomething(object sender, EventArgs e) 
    { 
     Console.Beep(); 
    }