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) { }

これは私の作業方法です...

4

1 に答える 1

6

worker.WorkerSupportsCancellationに設定する必要がありますtrue。デフォルト値はfalseです。実行する前にプロパティを true に設定します -

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

編集

cancelプロパティを設定returnし、DoWork メソッドから -

if (worker.CancellationPending)
{
   e.Cancel = true;
   return;
}
于 2012-10-20T19:23:34.770 に答える