Re: Почему не срабатывает RunWorkerCompleted?
От: bxt Россия indusov.net
Дата: 04.08.09 16:49
Оценка:
Здравствуйте, 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);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.