我创建了一个使用蜂鸣声控制台的简单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 :(得分: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();
}
在按钮中,您现在可以启动和停止计时器:
timer.Start();
或
timer.Stop();
答案 1 :(得分:0)
在这种情况下我会使用一个计时器,你不能关闭表单的原因是因为你从我理解的表单线程上调用了一个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();
}