Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB .NET] Port Scanner e Form
Forum - C# / VB.NET - [VB .NET] Port Scanner e Form

Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 22:30
Giovedì, 06/05/2010
Salve, gente !

Ho scritto un Port Scanner completamente funzionante, ma mi sono imbattuto in un "grosso" problema.

Come ogni Port Scanner, tento la connessione tramite Socket all'IP (127.0.0.1 poichè lo utilizzo sul mio pc) e ad una determinata porta (da 0 in poi, incrementa ad ogni "giro" :-P).


Il codice, dopo aver tentato la connessione (in un timer con Interval 1) controlla se la connessione è riuscita (If tcpClient.Connected = True). Se è riuscita aggiunge la porta ad una Lista.

Il problema è che ogni connessione che fa ... mi si blocca per qualche istante la form, rallentando anche una eventuale selezione (ad esempio dello Stop Scan).

Avevo pensato al Multithreading, ma non mi sembra una buona idea .. avevo pensato di farlo gestire ad un altro Form, ma non ottengo risultati ... quindi mi affido a Voi :rofl:


Vi prego, aiutatemi <.<


http://danyez.net < Un mio piccolo blog di recente nascita.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5667
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:06
Venerdì, 07/05/2010
Il multithreading era la cosa giusta.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Bl4ck3rk1ll (Normal User)
Rookie


Messaggi: 33
Iscritto: 08/03/2010

Segnala al moderatore
Postato alle 15:36
Sabato, 08/05/2010
Testo quotato

Postato originariamente da nessuno:

Il multithreading era la cosa giusta.



Ha ragione :k:


I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile.
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 15:01
Venerdì, 04/06/2010
Testo quotato

Postato originariamente da nessuno:

Il multithreading era la cosa giusta.




Beeene .. allora faccio una domanda diretta diretta.

Come superare il problema del Cross-threading ?


http://danyez.net < Un mio piccolo blog di recente nascita.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5667
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:45
Venerdì, 04/06/2010
Testo quotato

Postato originariamente da Danyez:

Testo quotato

Postato originariamente da nessuno:

Il multithreading era la cosa giusta.




Beeene .. allora faccio una domanda diretta diretta.

Come superare il problema del Cross-threading ?



Non è tanto diretta diretta ... cosa intendi?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:12
Venerdì, 04/06/2010
Testo quotato

Postato originariamente da Danyez:
Beeene .. allora faccio una domanda diretta diretta.

Come superare il problema del Cross-threading ?



Al posto di eseguire il codice nel thread diverso, invochi dinamicamente un metodo tramite Invoke dal form principale. Esempio:
Codice sorgente - presumibilmente VB.NET

  1. Public Delegate Sub SampleCode()
  2.  
  3. Private Sub DoSomething()
  4.    'Codice che lancerebbe un'eccezione cross-thread
  5. End Sub
  6.  
  7. 'Ammettiamo che questa subb sia eseguita nel thread separato
  8. Private Sub Thread_Work()
  9.    'Invoca il metodo puntato dal delegate passato come parametro
  10.    Me.Invoke(New SampleCode(AddressOf DoSomething))
  11. End Sub



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 20:27
Venerdì, 04/06/2010
Testo quotato

Postato originariamente da Il Totem:

Testo quotato

Postato originariamente da Danyez:
Beeene .. allora faccio una domanda diretta diretta.

Come superare il problema del Cross-threading ?



Al posto di eseguire il codice nel thread diverso, invochi dinamicamente un metodo tramite Invoke dal form principale. Esempio:
Codice sorgente - presumibilmente VB.NET

  1. Public Delegate Sub SampleCode()
  2.  
  3. Private Sub DoSomething()
  4.    'Codice che lancerebbe un'eccezione cross-thread
  5. End Sub
  6.  
  7. 'Ammettiamo che questa subb sia eseguita nel thread separato
  8. Private Sub Thread_Work()
  9.    'Invoca il metodo puntato dal delegate passato come parametro
  10.    Me.Invoke(New SampleCode(AddressOf DoSomething))
  11. End Sub




Ti ho contattato via MP,
ho problemi con il Timer e davvero non so più cosa fare.


http://danyez.net < Un mio piccolo blog di recente nascita.
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:04
Domenica, 06/06/2010
Semplicemente hai inizializzato un nuovo thread, e poi hai usato il timer pensando che il solo fatto di creare un thread facesse in modo che tutto il codice venisse eseguito in esso. Ma non funziona così. Ti ho risposto opportunamente.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote