Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Wykonywanie funkcji w osobnym wątku

Przemo_2014 24 Lut 2013 09:48 1779 6
  • #1 24 Lut 2013 09:48
    Przemo_2014
    Poziom 19  

    Witam,

    Piszę program który zarządza bazą danych. Jedna z funkcji pobiera dane z bazy sql po czym zamieszcza je w pliku excel. Funkcja ta wykonuje się dłuższy czas co wpływa na blokadę programu. Więc postanowiłem uruchamiać tą funkcję w osobnym wątku jak poniżej:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Podczas kompilacji dostaje:

    C# - Wykonywanie funkcji w osobnym wątku

    Kiedy funkcja będzie typu static (static void save(){...}):

    C# - Wykonywanie funkcji w osobnym wątku

    Czy to znaczy że jeżeli chcę uruchomić jakąś funkcję w osobnym wątku to funkcja jak i zmienne w niej zawarte muszą być rodzaju static ?

    0 6
  • #2 24 Lut 2013 10:32
    gaskoin
    Poziom 38  

    Tu nie chodzi o wątek, masz napisane w błędzie field initializer cannot reference to non static object. Czytaj zdania od początku i w całości.

    Musisz zainicjować referencję na nowy wątek np w konstruktorze. A najlepiej bezpośrednio przed jego wystartowaniem, bo inaczej nie będzie to działało jak sobie zażyczyłeś.

    0
  • Pomocny post
    #6 24 Lut 2013 17:19
    wiesniak
    Poziom 31  

    Twój problem polega na tym, że chcesz skorzystać z kontrolki / obiektu ProgressBar, która istnieje w innym wątku niż ten, z którego wywołujesz. Używając metody Invoke sprawisz, że operacje zostaną przeprowadzone we właściwym wątku.

    Podając przykład w poprzednim poście miałem na myśli użycie "progressBar" w miejsce "c".

    Założyłem też, że Twoja aplikacja jest w Windows Forms. Jeśli nie, to trzeba poszukać innego rozwiązania (np. w silverlight to będzie Dispatcher.BeginInvoke).

    0