Здравствуйте, 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"