我正在編寫一個程序來查找特定文件夾中的所有重複文件。多線程能夠停止/暫停/繼續
我的想法是收集所有文件名到string[]
。然後運行多個線程來散列每個字符串[]元素文件(按內容散列)並檢查散列是否已經在字典中查找重複項。
我初始化我的啓動按鈕搜索:
//Start button:
private void btnStart_Click(object sender, EventArgs e)
{
Search.initialize(this.labelPath.Text, this.textResultsFile.Text);
}
//My run method
public void run(string basePath, string resultFile)
{
//string[] contains all file paths
string[] filePaths = Directory.GetFiles(@basePath, "*", SearchOption.AllDirectories);
HashingCompletedCallback callback = new HashingCompletedCallback(CheckDuplicate);
Multi multi = new Multi(string[0], callback);
Thread T1 = new Thread(new ThreadStart(multi.HashFile));
T1.Start();
}
因此,在這種情況下,我服用string[0]
,這是在路徑列表(例如:C:/BasePath/first.txt'
)第1條路徑,散列文件,並在callback
如果哈希檢查存在如果字典,如果是的話,找到重複,否則我只是添加哈希庫。
因此,這裏有我面對現在存在一些問題:
如何實現這樣的搜索停止/繼續和重啓?我已經使用Windows.Forms創建了這些按鈕,但我不確定如何控制它們,並且不會因用戶界面鎖定而失敗。例如,如果我啓動
foreach
string[] as element
- >我的用戶界面凍結,無法執行任何操作。目前我寫了我的程序,所以我可以使用一個工作線程。我如何自動創建更多的線程並將其引入搜索?在這種情況下,我想我必須將鎖放入回調函數中,所以我的字典一次只能由一個線程檢查和寫入。在這可以我只是鎖定我的方法功能或整個班級將被鎖定?
順便說一句:我沒有讀到:how to pause/resume a thread,但不知道如何使用它。
什麼是C++連接?這是標題中的拼寫錯誤嗎? – spender
類型。一段時間之前一直在做C++。 – Dancia
NP。順便說一句:沒有必要在標題中加標籤。您已經標記了這個C#,所以不需要在標題 – spender