简体   繁体   中英

c# stop button for beep sound

I created a simple C# app that uses the beep console. I want to add a stop button to stop the beeping, but once the app starts to run it doesnt let me hit a close/button button. Below is the code i have.

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);
    }
}

The reason is that you execute button1_Click in the GUI thread. When you call this method the thread will be stuck there for quite some time because you make it sleep.

If you remove Thread.Sleep(int1*60000); you will notice that your application is unresponsive until it is done beeping.

You should try to use a Timer instead. Something like this should work (this is based on the Windows.Forms.Timer ):

private Timer timer = new Timer(); 

And set it up

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


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

In your buttonclick you are now able to start and stop the timer:

timer.Start();

or

timer.Stop(); 

I would use a timer in this case, the reason why you can't close the form is because you are calling a sleep on the form thread from what I understand. Calling a sleep on the form thread will give the impression the app has crashed.

Here is a quick sample code I built in c#, it will beep the console at the time given. I hope it helps.

    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();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM