BackgroundWorker - identyfikacja po CancelAsync

0

Witam

W jaki sposób przekazać z BackgroundWorkera informacje identyfikującą dany wątek po wywołaniu CancelAsync() ?
(e.Result daje null). Pod RunWorkerCompleted podpiętych jest kilka różnych BackgroundWorker'ów.

1

Możesz sobie porównać argument sender z listą twoich background workerów czy w jaki tam sposób sobie je identyfikujesz.

0

Mam 2 klasy

public class A : Net
{

}

public class B : Net
{

}

i klasę bazową

    public class Net
    {

        private BackgroundWorker bw;
        public event RunWorkerCompletedEventHandler RunWorkerCompleted;
        public event ProgressChangedEventHandler ProgressChanged;


        public BackgroundWorker Bw
        {
            get { return bw; }
        }



        public Net()
        {

            bw = new BackgroundWorker();
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;

            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

            
        } 
        public void Start(RequestState rs)
        {

            if (!bw.IsBusy)
            {
                bw.RunWorkerAsync(rs); 
            }
        }

        public void Cancel()
        {
            if (bw.WorkerSupportsCancellation)
            {
                bw.CancelAsync();
            }

        }



      //reszta kodu pominięta
     }

i teraz tworzę sobie dwa obiekty

private A ANet = new A();
private B BNet = new B();

podczepaim zdarzenia do wspólnej procedury

ANet.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Net_RunWorkerCompleted);
BNet.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Net_RunWorkerCompleted);


void Net_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{

if (sender == ANet.Bw)
{
//warunek prawdziwy - patrz opis niżej
}


}

Tu mam mały problem:

Uruchamiam ANet.Start, i dla celów testowych daję BNet.Cancel w Net_RunWorkerCompleted
sender wskazuje na ANet. BNet.Cancel na pewno zatrzymuje pobieranie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1