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



Teraz jest 30 lis 2024, o 11:13


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 ]
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 ]
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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO