Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 23 maja 2025, o 05:22


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 23 sie 2018, o 16:44 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    Cześć

    Potrzebuję z eventu, który jest funkcją statyczną, wywołać niestatyczną, ale coś nie idzie.
    Jak próbuję np.
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    to dostaje:
    Cytuj:
    Dla niestatycznego pola, metody lub właściwości „Form1.richTextBox1” wymagane jest odwołanie do obiektu.

    Wyczytałem, że trzeba zrobić coś takiego:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Wtedy niema niby błędu, ale funkcja nic nie wypisuje.
    Czyli w skrócie w takim kodzie, Button3 działa, a Button2 nie.:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Przypuszczam, że to dlatego, że ten obiekt frm jest niezależny od tego, na którym leży moje pole tekstowe i dlatego nic nie widać.
    Ale jak w takim razie powinno się takie rzeczy realizować?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sie 2018, o 09:10 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    Skoro masz taki problem, to znaczy, że masz problem z architekturą projektu. Niech event nie będzie statyczny.

    Jak wrzucisz projekt to zobaczę co się dzieje, chociaż od dawna nie miałem styczności z WF.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sie 2018, o 11:14 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    Problem się pojawił kiedy chciałem przeportować ten przykład na WF (program monitoruje zmiany plików w katalogu): Link
    Przerobiłem kod tak:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Jak widać pokasowałem static z eventów. No i wszystko się kompiluje, ale wystąpienie eventu powoduje błąd:
    Cytuj:
    System.InvalidOperationException: „Nieprawidłowa operacja między wątkami: do formantu 'richTextBox1' uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony.”
    Później się kapnąłem, że w przyborniku też jest FileSystemWatcher i on tworzy już niestatyczne eventy, które działają poprawnie z WF.

    Ale tak na przyszłość fajnie by było wiedzieć jak ze statycznej funkcji odpalić niestatyczną?
    Albo jak odpalić np. ten FileSystemWatcher bez stawiania tego obiektu na formę, tak żeby generował niestyczne eventy?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sie 2018, o 16:05 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    Pisane z palca bez testowania. Powinno działać.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    PS Polecam książkę C# 6.0. Kompletny przewodnik dla praktyków. Tam wielowątkowość jest bardzo ładnie opisana.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sie 2018, o 16:25 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    No normalnie działa :P
    Dzięki wielkie za przykład.

    Czytałem, że to można jakoś delegatami zrobić, ale takiej konstrukcji na tą chwilę bym nie wykminił.
    Co prawda nie bardzo kumam czemu te wątki się nie widzą, ale już mniej więcej wiem, w którą stronę iść.
    Nom, czas zainwestować w jakąś książkę do c#, bo jednak netowe kursy tylko po łepkach o ten temat zahaczają.

    Pozdro



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sie 2018, o 17:22 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    To do podstaw i wielowątkowości polecam tę książkę, o której wspomniałem.
    Środowisko nie pozwala na bezpośrednią ingerencję jednego wątku w drugim, aby uchronić się przed różnymi błędami związanymi z równoczesnym dostępem do zmiennych. To tak w dużym uproszczeniu.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 14:50 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 mar 2014
    Posty: 1475
    Pomógł: 167

    Ten sam problem był poruszany kilka razy na forum w temacie obsługi przesyłania danych po RS232 np. w poradniku Zielonej Żabki topic5520.html#p64783. Tam też przy odebraniu danych i chęci ich zwizualizowania trzeba zrobić podobny myk. Dlatego warto zrozumieć zasadę działania, bo na pewno się przyda :).

    --
    Pozdrawiam,
    Robert


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 20:25 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    Aha faktycznie było już o tym, przy RS-sie rzeczywiście to ma sens.
    Dzięki za linka.

    Pozdro



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO