Identyfikowanie wątku

0

Witam.

Napisałem aplikację, która ściąga kilka plików na raz poprzez WebClient'a. Do tego celu uruchamiam kilka wątków w jednym czasie.

Thread[] tThread = new Thread[5];
for(int i=0; i<5; i++)
{
tThread[i] = new Thread(Funkcja);
tThread[i].Start();
}

Wątki super działają, pliki się ściągają. Teraz w funkcji przechwytuje zdarzenie WebClienta: DownloadFileCompleted i chce uruchomić ściągnięty plik, tylko nie wiem który wątek właśnie się zakończył... Jak pobrać to "i" z tablicy wątków?

Dziękuje za pomoc.

Pozdrawiam, Mateusz.

0

Nie pomogło mi to niestety, może nie potrafię tego użyć do końca?

UserState zawsze zwraca mi 0...

0

Może wykorzystaj właściwość Name:

public static void Main(String[] args)
{
    Thread[] threads = new Thread[10];
    for (int i = 0; i < 10; i++)
    {
        threads[i] = new Thread(new ParameterizedThreadStart(Do));
        threads[i].IsBackground = true;
        threads[i].Name = "Thread" + i;
    }
    Object value = "Tekst do wypisania";
    foreach (Thread t in threads)
        t.Start(value);
    foreach (Thread t in threads)
        t.Join();
    Console.WriteLine("Koniec");
}

private static void Do(Object value)
{
    lock (value)
    {
        Thread.Sleep(222);
        Console.WriteLine(Thread.CurrentThread.Name + " : " + value);
        Thread.Sleep(111);
    }
}
0

Próbowałem tego wcześniej, za każdym razem Current.Thread.Name zwraca "", czyli nic. Wydaje mi się, że po przechwyceniu zdarzenia WebClient.DownloadFileCompleted wątek, który uruchamiał funkcję jest już martwy.

0

No to wysyłaj sobie eventa z wątku zanim jeszcze się zakończy zamiast przechwytywac te z WebClienta. W evencie mozesz przesyłać nazwę pliku i np. informacje o powodzeniu lub niepowodzeniu.

Lub uzyj klasy BackgroundWorker, która ma zaimplementowane to wszystko o czym napisałem.

0
othello napisał(a)

No to wysyłaj sobie eventa z wątku zanim jeszcze się zakończy zamiast przechwytywac te z WebClienta. W evencie mozesz przesyłać nazwę pliku i np. informacje o powodzeniu lub niepowodzeniu.

Lub uzyj klasy BackgroundWorker, która ma zaimplementowane to wszystko o czym napisałem.

Dziękuje bardzo za wyczerpującą odpowiedź :)

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