我有這個棘手的任務,我一直試圖實現安靜的某個時候,但直到現在我想不出任何使它工作。無論如何這裏是場景...如何用C中止任務並行庫中的特定線程
我有一個winform應用程序包含一個listview和一個按鈕。 列表視圖包含1列,其中包含我稍後需要傳遞給我的函數的數據。該列包含說50行包含鏈接列表。
現在我有這個功能,我使用來獲取和抓住這些鏈接的使用並行多線程模式(任務並行庫)中的內容(一次5個環節),其中:
//List<int> currentWorkingItem //contains the indices of the items in listview
//List<string> URLsList //contains the URLs of the items in listview
Parallel.ForEach(URLsList, new ParallelOptions() { MaxDegreeOfParallelism = 5 }, (url, i, j) =>
{
//show to user this link is currently being downloaded by highlighting the item to green...
this.BeginInvoke((Action)(delegate()
{
//current working item
mylistview.Items[currentWorkingItem[(int)j]].BackColor = green;
}));
//here I download the contents of every link in the list...
string HtmlResponse = GetPageResponse(url);
//do further processing....
});
現在上面的代碼完美地工作......但有時我希望用戶放棄某個當前正在運行的線程,並繼續處理列表中的其餘線程......是否可以在此實現?如果是的話,請幫我..我真的很感激任何解決方案或建議..
[檢查了這一點(http://msdn.microsoft.com/en-us/library/ dd460721.aspx)。如果這不起作用,您可能需要創建多個任務(一個foreach下載),每個任務可以單獨關閉,而不是Parallel.ForEach。不應該困難。 –
我用簡單的哈希表找到了更好的解決方案... – SolidSnake
使用'字典'而不是散列表。 –