Здравствуйте, senglory, Вы писали:
S>S>using System;
S>using System.ComponentModel ;
S>using System.Collections.Generic;
S>using System.Linq;
S>using System.Text;
S>using System.Threading;
S>using System.Reflection;
S>using Retriever.Interface;
S>namespace Retriever
S>{
S> class Program
S> {
S> static IRetriever cls;
S> static void Main(string[] args)
S> {
S> cls = new RetrieverMainClass();
S> BackgroundWorker bw = new BackgroundWorker();
S> bw.WorkerSupportsCancellation = true;
S> bw.DoWork += new DoWorkEventHandler(bw_DoWork);
S> bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
S> bw.RunWorkerAsync();
S> Console.WriteLine("Press ENTER to exit...");
S> Console.ReadLine();
S> bw.CancelAsync();
S> Thread.Sleep(5000);
S> }
S> static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
S> {
S> if (e.Cancelled )
S> cls.Suspend ();
S> }
S> static void bw_DoWork(object sender, DoWorkEventArgs e)
S> {
S> foreach (string s in cls.GetURLS())
S> Console.WriteLine(s);
S> }
S> }
S>}
S>
S>Если нажать ENTER, то bw_RunWorkerCompleted не вызовется. Почему?
Мне кажется он у тебя вызывается до того как ты на Enter нажал.
:from Reflector
private void WorkerThreadStart(object argument)
{
object result = null;
Exception error = null;
bool cancelled = false;
try
{
DoWorkEventArgs e = new DoWorkEventArgs(argument);
this.OnDoWork(e); // тут твой хандлер
if (e.Cancel)
{
cancelled = true;
}
else
{
result = e.Result;
}
}
catch (Exception exception2)
{
error = exception2;
}
RunWorkerCompletedEventArgs arg = new RunWorkerCompletedEventArgs(result, error, cancelled);
this.asyncOperation.PostOperationCompleted(this.operationCompleted, arg);
}