2012-11-17 18 views
2

我的應用程序成功檢測到我想要檢測的特定文件,但消息箱總是隻顯示一次,但很多次我不知道錯在哪裏。C#代碼行總是檢查特定文件是否存在,但消息框始終顯示,爲什麼?

旁邊的問題是這種總是檢查某個文件是否存在的好方法?還是有更好更準確的方法?如果有任何建議或鏈接將是一個很大的幫助。謝謝!

這裏是我的代碼:

private void Form1_Load(object sender, EventArgs e) 
     { 
      timer1.Start(); 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      if (File.Exists(patch_to_checked)) 
      { 
       MessageBox.Show("File Found!"); 
       timer1.Stop(); 
      } 
     } 
+2

另請檢查Filewatcher類http://msdn.microsoft.com/zh-cn/library/system .io.filesystemwatcher.aspx – Amitd

+1

@Amitd好的,謝謝!有更多工作示例的更多鏈接?我會讀這 –

+1

是的..試試這些http://www.c-sharpcorner.com/uploadfile/puranindia/filesystemwatcher-in-C-Sharp/和http://www.geekpedia.com/tutorial173_File-monitoring-使用FileSystemWatcher.html和http://www.sitedev.com/source/programmer/samples/watcher.asp – Amitd

回答

4

您應該在進入功能後立即停止定時器。否則,當用戶將光標移動到按鈕以關閉消息框時,計時器正在滴答:

private void timer1_Tick(object sender, EventArgs e) 
    { 
     timer1.Stop(); 

     if (File.Exists(patch_to_checked)) 
     { 
      MessageBox.Show("File Found!"); 
     } 
     else 
     { 
      timer1.Start(); 
     } 
    } 
+0

我明白了,謝謝! –

1
private void timer1_Tick(object sender, EventArgs e) 
{ 
    timer1.Stop(); 
    if (File.Exists(patch_to_checked)) 
    { 
      MessageBox.Show("File Found!"); 
    } 
    else 
    { 
     timer1.Start(); 
    } 
} 

它需要一些時間重繪屏幕,它重繪但不是因爲計時器

+0

@Arjan我渴望... – rene

2

您需要停止計時器的時間很短的感覺顯示對話框。

原因是在顯示(模態)對話框時,「計時到達」(「Tick」)事件排隊等候。然後,當對話框被解除時,另一個這樣的消息被傳送到您的應用程序,導致代碼再次執行,再次顯示對話框。

您還可以通過以不阻止導致顯示消息的線程的方式顯示消息來解決此問題,以便立即繼續執行下一個語句。但通常,如果您需要執行模態或長時間運行的操作,最好在處理Tick事件時停止定時器。

+0

你也可以解釋爲什麼。初學者有點棘手。 – LMB

+0

@LMB完成。 (填充) –

相關問題