Re[2]: Почему не срабатывает RunWorkerCompleted?
От: senglory  
Дата: 04.08.09 17:04
Оценка:
Здравствуйте, bxt, Вы писали:

bxt>Здравствуйте, 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 не вызовется. Почему?


bxt>Мне кажется он у тебя вызывается до того как ты на Enter нажал.


bxt>:from Reflector

bxt>private void WorkerThreadStart(object argument)
bxt>{
bxt> object result = null;
bxt> Exception error = null;
bxt> bool cancelled = false;
bxt> try
bxt> {
bxt> DoWorkEventArgs e = new DoWorkEventArgs(argument);
bxt> this.OnDoWork(e); // тут твой хандлер
bxt> if (e.Cancel)
bxt> {
bxt> cancelled = true;
bxt> }
bxt> else
bxt> {
bxt> result = e.Result;
bxt> }
bxt> }
bxt> catch (Exception exception2)
bxt> {
bxt> error = exception2;
bxt> }
bxt> RunWorkerCompletedEventArgs arg = new RunWorkerCompletedEventArgs(result, error, cancelled);
bxt> this.asyncOperation.PostOperationCompleted(this.operationCompleted, arg);
bxt>}



Исключено. GetURLS() — это минут на 10 вызов, а я рву сразу как т-ко увижу "Press ENTER"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.