繁体   English   中英

C#停止按钮发出哔声

[英]c# stop button for beep sound

我创建了一个使用蜂鸣控制台的简单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);
    }
}

原因是您在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(); 

在这种情况下,我将使用计时器,之所以无法关闭表单,是因为您根据我的理解在表单线程上调用了sleep。 在表单线程上调用sleep会给应用程序带来崩溃的印象。

这是我用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();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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