2013-12-20 143 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

應該很容易。大多數的編程語言/庫(你正在使用?)都有一個「等待」函數,一個定時器或者類似的東西。

您不希望使用循環等待一段時間。

相關問題