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#] obsługa zdarzeń portu szeregowego.

mikkel 14 Lis 2011 10:43 2863 3
  • #1 14 Lis 2011 10:43
    mikkel
    Poziom 13  

    Witam.
    Chcę otrzymywać bajty z portu COM1 i następnie wartości wyświetlić na wykresie. Jeżeli kolejne bajty zapisuję w tablicy a następnie po kliknięciu buttona ładuję na wykres to wszystko działa poprawnie jednak kiedy chcę żeby każda próbka była umieszczana na wykresie odrazu to mam komunikat: "Cross-thread operation not valid: Control 'p1' accessed from a thread other than the thread it was created on."
    O ile wiem to moja aplikacja jest jednowątkowa więc nie wiem dlaczego przy tym evencie jest błąd. Poniżej zamieszczam kod:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0 3
  • #3 14 Lis 2011 11:15
    marcinj12
    Poziom 40  

    Cytując za MSDN-em:

    Cytat:
    The DataReceived event is raised on a secondary thread when data is received from the SerialPort object. Because this event is raised on a secondary thread, and not the main thread, attempting to modify some elements in the main thread, such as UI elements, could raise a threading exception. If it is necessary to modify elements in the main Form or Control, post change requests back using Invoke, which will do the work on the proper thread.

    czyli musisz zastosować odwołania jak w aplikacji wielowątkowej. W tym wypadku coś w stylu:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #4 14 Lis 2011 11:31
    mikkel
    Poziom 13  

    Dokładnie tak też zrobiłem i działa. Panowie wielkie dzięki. Temat zamykam.

    0