我做了一个正在循环等待的程序,直到用户输入匹配系统时间的时间......但问题只要它在循环中等待,直到时间匹配它给出没有响应的符号,这不是那么“可爱“,用户会认为我的程序卡住..所以我希望我的程序看起来正常”没有滚动鼠标,没有响应标志,没有苍白的窗口“我希望它能正常运行..我怎么能这样做?我用c#
private void button1_Click(object sender, EventArgs e)
{
string clock;
clock = textBox1.Text;
System.Windows.Forms.MessageBox.Show("system will close in " + clock);
if (radioButton1.Checked)
{
clock = clock + " AM";
}
if (radioButton2.Checked)
{
clock = clock + " PM";
}
while (DateTime.Now.ToString("h:mm tt") != clock)
{
if (DateTime.Now.ToString("h:mm tt") == clock)
break;
}
System.Diagnostics.Process.Start("shutdown", "/s /t 0");
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
string clock;
clock = textBox1.Text;
System.Windows.Forms.MessageBox.Show("system will Restart in " + clock);
if (radioButton1.Checked)
{
clock = clock + " AM";
}
if (radioButton2.Checked)
{
clock = clock + " PM";
}
while (DateTime.Now.ToString("h:mm tt") != clock)
{
if (DateTime.Now.ToString("h:mm tt") == clock)
break;
}
System.Diagnostics.Process.Start("shutdown", "/r /t 0");
this.Close();
}
private void button4_Click(object sender, EventArgs e)
{
string clock;
clock = textBox1.Text;
System.Windows.Forms.MessageBox.Show("system will lock in " + clock);
if (radioButton1.Checked)
{
clock = clock + " AM";
}
if (radioButton2.Checked)
{
clock = clock + " PM";
}
**while (DateTime.Now.ToString("h:mm tt") != clock)
{
if (DateTime.Now.ToString("h:mm tt") == clock)
break;
}**
LockWorkStation();
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
string clock;
clock = textBox1.Text;
System.Windows.Forms.MessageBox.Show("system will logg off in " + clock);
if (radioButton1.Checked)
{
clock = clock + " AM";
}
if (radioButton2.Checked)
{
clock = clock + " PM";
}
while (DateTime.Now.ToString("h:mm tt") != clock)
{
if (DateTime.Now.ToString("h:mm tt") == clock)
break;
}
ExitWindowsEx(0, 0);
this.Close();
}
private void groupBox1_Enter(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
您的计划经常检查时间。这可能会导致您看到的行为。通常,您将检查时间,然后稍等一会儿再次检查,从而允许OS进程调度程序让其他程序线程(如处理窗口事件的程序)运行。
您可能还想检查以确保当前时间超过目标时间(而不是对相等进行严格比较)。
我不知道你是如何处理GUI事件或其他线程的,所以你可能需要以不同的方式进行睡眠/产生。
我认为这是Java(?)。这是一个等待“很好”的mod的例子。 (来自button1_Click
)
while (DateTime.Now.ToString("h:mm tt") >= clock)
{
if (DateTime.Now.ToString("h:mm tt") >= clock)
break;
}
Thread.sleep(1000);
}
答案 1 :(得分:1)
应该很容易。大多数编程语言/库(你使用?)都有一个“等待”功能,一个计时器或类似的东西。
您不希望使用循环周期等待一段时间。