2012-10-20 89 views
1

我有一個後臺工作人員的應用程序。在doWork方法中,我做了一個html web請求。如果這個請求失敗(例如錯誤404),我想在線程結束之前退出。因此,在我抓我加入這個代碼後臺工作人員不停止

worker.CancelAsync(); 
    if (worker.CancellationPending) 
    { 
    e.Cancel = true; 
    } 

的問題是,該線程不會阻止,但它會創建一個新的HTML Web請求。

一些代碼:

try 
{ 
var request = (HttpWebRequest)WebRequest.Create(url1); 
request.Timeout = 5000; 
request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"; 
var document = new HtmlAgilityPack.HtmlDocument(); 
try 
{ 
using (var responseStream = request.GetResponse().GetResponseStream()) 
{ 
document.Load(responseStream, Encoding.UTF8); 
//some lines of code to parse html 
} 
catch (WebException we){ 
worker.CancelAsync(); 
if (worker.CancellationPending) 
{ 
e.Cancel = true; 
return; 
} 
} 
catch (Exception) { } 

這是我做的工作方法......

+0

你不需要worker.CancelAsync ()和if(worker.CancellationPending部分,你可以離開你的BackgroundWorker沒有它 – Casperah

回答

5

您需要設置worker.WorkerSupportsCancellationtrue。默認值爲false。 設置屬性爲true運行前 -

BackgroundWorker worker = new BackgroundWorker(); 
worker.WorkerSupportsCancellation = true; 
worker.RunWorkerAsync(); 

編輯

設定從DoWork的方法cancel財產和return -

if (worker.CancellationPending) 
{ 
    e.Cancel = true; 
    return; 
} 
+0

只是一件小事情,Defualt –

+0

我哈哈已經完成了這個.... – user1005633

+0

更新了答案。 –