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# - Wielowątkowość w Windows Form Application

michal2409 05 Gru 2013 20:15 1587 4
  • #1 05 Gru 2013 20:15
    michal2409
    Poziom 12  

    Witam!

    Mam taki mały problem. Mam wielowątkową aplikacje. Mój problem polega na tym, że mam wątek X który mi otwiera jakąś formatkę, i mam watek Y, który chciałby napisać coś na tej formatce, np. na labelu. Nie wiem, czy może robię coś wbrew sztuce, ale za nic w świecie z mojego wątku Y nie mogę wywołać metody, która jest zaimplementowana w klasie formatki, która miałaby mi coś wyświetlić.

    Ma ktoś jakieś sugestię jak to rozwiązać?

    0 4
  • #2 06 Gru 2013 12:56
    truski
    Poziom 15  

    Modyfikować formatkę może tylko wątek w którym formatka została utworzona, ale o tym już pewnie wiesz z treści wyjątku jaki otrzymałeś przy pierwszej próbie modyfikacji :D

    Dla pełnego zrozumienia problemu możesz zajrzeć do MSDNa

    Osobiście w takich przypadkach stosuję taki mały trik - tam, gdzie chcę zmodyfikować formatkę wywołuję:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #3 09 Gru 2013 13:10
    michal2409
    Poziom 12  

    Tzn mam to wywołać w miejscu, gdzie tego potrzebuje, czy muszę jeszcze to w jakąś osobną metodę wrzucić? Jak wrzucam bezpośrednio tam gdzie tego potrzebuje, to wywala mi błąd, że dla niestatycznego pola należy się odwołać do obiektu.

    0
  • Pomocny post
    #4 10 Gru 2013 20:45
    truski
    Poziom 15  

    To, czy wywołasz to bezpośrednio w miejscu gdzie tego potrzebujesz, czy też opakujesz to w jakąś metodę, którą i tak wywołasz w miejscu gdzie potrzebujesz, jest bez znaczenia. Metoda Invoke powoduje, że kod do którego odnosi się delegat zostaje wywołany w wątku do którego należy kontrolka. W opisie metody Invoke na stronach MSDNa jest przykład użycia, właśnie dla aplikacji wielowątkowej.

    Co do twojego błędu to mogę jedynie zgadywać, że twoja metoda, którą uruchamiasz w drugim wątku jest metodą statyczną i z niej próbujesz dobrać się do składowych klasy formatki, a tego tak się nie robi. Zerknij tutaj

    0
  • #5 11 Gru 2013 18:35
    michal2409
    Poziom 12  

    Rozwiązałem problem, po pierwsze brakowało mi:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    A później moja metoda:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    truski dzięki za pomoc, bo naprowadziłeś mnie na rozwiązanie, zamykam temat.

    0