Cześć koledzy i koleżanki,
Potrzebuje pomysł na realizację pewnego konceptu, a konkretnie nakierowania na rozwiązanie - szkielet programu.
Zacząłem coś dłubać w WPF i tak: Program ma łączyć się przez telnet z innym urządzeniem i cyklicznie wysyłać komendy i odpytywać o pomiary i stany. W trakcie połączenia interfejs musi realizować wizualizację pomiarów. Częstotliwość niezbyt duża, powiedzmy co sekundę lub rzadziej. Korzystam z biblioteki Minimalistic telnet i to działa. Tzn łącze się z serwerem, wysyłam komendę, czytam odpowiedź i wyświetlam ją na ekranie. Pytanie tylko jak to zrobić cyklicznie? Powiedzmy, że w tej chwili po wciśnięciu buttona connect tworzę obiekt który opowiada za połączenie i w procedurze obsługi przycisku dzieje się cała reszta. Jak teraz rozegrać to aby możliwe było cykliczne odpytywanie i kontrolowanie połączenia? Czy może ktoś podsunąć jakiś pomysł? Jeśli użyję timera to w procedurze obsługi nie mogę korzystać z metod połączenia, ponieważ obiekt był utworzony w innym miejscu. Wiem, to pewnie jest bardzo proste, ale nie zajmuję się tym na codzień, ani zawodowo ani hobbystycznie. Tak na potrzeby chwili próbuje coś ogarnąć.
Cześć
Nie wiem do końca jak to ma działać. Jednak nieśmiało zaproponuję użycie pętli w której zostanie umieszczony cały kod do cyklicznego wykonywania. Oczywiście wywołanie tej pętli po trigerze naciśnięcia przycisku.
Odpal w zdarzeniu w trakcie/ po załadowaniu okna metodę, która Ci zainicjuje obiekt i przypisz go do zmiennej.
Możesz użyć timera, który w swoich zdarzeniu będzie korzystał z tego obiektu, ale musisz sobie sprawdzać, czy obiekt w dalszym ciągu jest poprawny (stan połączenia etc, czy nie jest nullem) i jakoś na to zareagować. W dokumentacji pewnie będzie napisane czy należy otwierać i zamykać połączenie za każdym razem, czy też może być cały czas otwarte.
Hmm chyba najbardziej rozchodzi mi się o to, aby utworzyć obiekt klasy telnetConnection po kliknięciu przycisku (inicjacja połączenia z wybranymi parametrami) i mieć do niego zawsze dostęp: Po kliknięciu innego przycisku zamknąć połączenia (wywołać metode Close()) w tym obiekcie, Po kliknięciu innego przycisku wysłać dane , a w cyklicznym timerze odczytywać dane metodą Read() i logować do pliku. Nie ustawiać kolejnej instancji połączenia za każdym razem tylko utrzymać jedno i z niego korzystać.
po prostu zrób pole na poziomie klasy i nie widzę przeszkód żeby zrobić tak jak mówisz, nie widzę też czemu timer nie mógłby korzystać z tego obiektu
może pokaż kod, powiedz jakie dostajesz błędy kiedy próbujesz użyć z timera itp
jeśli chcesz proste rozwiązanie to jednak proponuję łączyć się za każdym razem, odczytywać i zamykać połączenie. w ten sposób oszczędzisz sobie problemów z utrzymywaniem połączenia, reagowaniem na błędy itp. a narzut ponownego łączenia nie powinien być istotny jeśli nie robisz tego kilkadziesiąt razy na sekundę