2013-12-20 142 views
-2

我做了一个程序,在while循环中等待,直到用户匹配系统时间的时间输入为止......但问题只要它在while循环中等待,直到时间匹配没有响应的标志,并没有那么“可爱”,用户会认为我的程序卡住了..所以我希望我的程序看起来正常“不滚动鼠标,没有不响应的标志,没有苍白的窗口”我希望它运行通常..我该怎么做?我用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) 
     { 

     } 
    } 
} 

回答

1

你的程序是不断检查的时间。这可能会导致你看到的行为。通常,您会检查时间,然后等待一会儿,然后再次检查,从而允许OS进程调度程序让其他程序线程(如处理窗口事件的线程)运行。

您可能还希望检查以确保当前时间不超过目标时间(而不是严格比较相等性)的

我不知道你是如何处理GUI事件或其他线程,所以你可能需要做睡眠/产生不同的方式。

我认为这是Java(?)。这是一个等待“很好”的mod的例子。 (From button1_Click

while (DateTime.Now.ToString("h:mm tt") >= clock) 
{ 
    if (DateTime.Now.ToString("h:mm tt") >= clock) 
     break; 
    } 
    Thread.sleep(1000); 
} 
+0

对不起,我没有说..我编程它的C#..和谢谢你我试试吧^ _^ –

+0

伟大的,现在好多了,但仍然没有反应只是我想说非常感谢你和> = ..它是字符串,因此无论如何我有1分钟的时间来改变输入和系统时钟,所以我保留它== –

1

应该很容易。大多数的编程语言/库(你正在使用?)都有一个“等待”函数,一个定时器或者类似的东西。

您不希望使用循环等待一段时间。

相关问题