1

我创建了一个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);
    }
}
4

2 回答 2

0

在这种情况下,我会使用计时器,您无法关闭表单的原因是因为您根据我的理解在表单线程上调用睡眠。在表单线程上调用 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();
    }
于 2013-05-11T00:04:27.690 回答
0

原因是您button1_Click在 GUI 线程中执行。当你调用这个方法时,线程会被卡在那里很长一段时间,因为你让它休眠了。

如果您删除Thread.Sleep(int1*60000);,您会注意到您的应用程序在发出哔哔声之前没有响应。

您应该尝试使用 aTimer代替。像这样的东西应该可以工作(这是基于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(); 
于 2013-05-10T23:57:33.967 回答