2010-12-16 37 views
2

我試過幾個教程解決我的問題...但它是這樣一個biig和柏一個-.-需要幫助使用線程來監視指定的文件夾中的txt文件

下面的代碼:

private void btnMonitor_Click(object sender, EventArgs e) 
    { 
     lock (m_lock) 
     { 
      if (thread_isRunning) 
      { 
       thread_isAbortRequested = true; 
      } 
      else 
      { 
       thread_isAbortRequested = false; 
       thread_isRunning = true; 
       ThreadPool.QueueUserWorkItem(BackgroundMethod); 
      } 
     } 
     //StartMonitoring(); 
    } 

是的,我其實下面這個方法:How to start thread if button pressed and stop it if pressed again?

這就是爲什麼我的代碼是這樣的。

首先:

我的律程序的目的是讓用戶輸入的路徑到一個文本框,單擊監視器按鈕和賓果遊戲,螺紋上手和隨時監控指定的文件夾中所確定的文件(在這種情況下是txt),並將它們添加到數據網格中。

其實它已經在我的數據網格列表..問題是:當監視器按鈕被點擊時,線程只啓動一次:(而且我想要像每3秒BAASINGA新文件!!(如果添加該文件夾OFC)

我爲你們可以看到漂亮的小白,並具有所有這些線程,並調用問題IM,crossthreads問題,等等......你懂的!

我不問了工作代碼,只是建議和提示,使其成爲一件很酷的事

編輯1:

目前,唯一有錯誤的行是:ThreadPool.QueueUserWorkItem(BackgroundMethod);

錯誤的列表顯示爲: 錯誤1'System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback)'的最佳重載方法匹配有一些無效的參數;

錯誤2參數1:無法從'方法組'轉換爲'System.Threading.WaitCallback';

編輯2:

該方案得到了3個主要類別(不無效的主要LOL),它們分別是:

Form.cs - >在哪裏設置按鈕事件,打電話給我的特殊方法

ViewerManager - >實際上,我不知道這一個...我已經添加了構造函數和Execute方法,從DirectoryManager類調用GetFiles()

DirectoryManager - >這是我的寶貴班,有一個執行(字符串路徑),它調用R eadFiles(路徑)和GetFiles(路徑)..

GetFiles是一個字符串列表,並返回由ReadFiles()填充的_files(字符串列表)。

編輯3:

惡,我得到了它刷新數據網格視圖,但其使用windows.forms.timer ..

mehh任何想法W/O定時器?

OBS:對不起,我的英語可怕和菜鳥般的演技LOL

+1

+1對於bazinga。 – jlafay 2010-12-16 15:34:05

回答

1

正如您發現的,後臺線程只會執行一次。你確實需要使用FileSystemWatcher或某種計時器。

如果您不想使用FileSystemWatcher,最好使用DispatcherTimerBackgroundWorker內的循環 - 爲了您的目的,我強烈建議使用DispatcherTimer,因爲它處理的是UI線程,這意味着您可以安全地更新您的數據網格,而無需任何線程問題。

+0

嘿,我已經使用system.windows.timer,它工作得很好atm,並且與這些定時器(線程中的那些定時器)一起工作真是太痛苦了。猜猜這是現在的最終解決方案.. Sir ,你有點告訴我關於dispastcher ..! – D0cZ 2010-12-16 18:07:44

+0

哦等 - > ThreadPool.QueueUserWorkItem(** BackgroundMethod **);仍然有問題,不得不作出評論......如果這是最終的線程嗚呼的計時器解決方案 – D0cZ 2010-12-16 18:13:17

0

如何使用FileSystemWatcher

+0

是的,我已經在之前使用過......但這裏最主要的是:獲取線程的基礎知識! – D0cZ 2010-12-16 15:47:28