Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET / CF] bug? feature? incompetenza (mia)?

salute a voi
ho un'applicazione 
VB.NET
 che gira su windows CE che ogni tanto mi si
pianta su una cosa idiota.
in un thread separato dal principale, faccio un po' di comunicazione via
rete. se in questo thread cerco di modificare qualcosa nell'interfaccia
(banalmente: cambio il text di una label) mi si pianta tutto.
sono io, fesso, o qualcosa non va?
ciao
	d.


Sei tu fesso :-P
Non puoi fare direttamente così, in quanto i metodi, proprietà & co. di un 
thread UI devono essere chiamate esclusivamente da quel thread.
Quindi hai due possibilità:
1) Usi il metodo Invoke e i Delegate.
2) Usi il background worker (non so se c'è nel net CF 2.0)
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site 4 : 
http://www.thetotalsite.it
My Blog: 
http://blog.thetotalsite.it
MariokartDS Codice Amico: 532639027909 - CarmineC in MarioKartDS
Se un circuito funziona al primo tentativo è perchè il problema è molto
più nascosto e subdolo di quanto tu possa pensare...
E apparirà nel momento in cui farà il massimo danno 

ok
allora
ho aggiunto al codice della form la riga
  Private Delegate Sub myDelegate()
  Dim aDelegate As New myDelegate(AddressOf RoutineDaChiamare)
  Me.Invoke(aDelegate)
ma sicuramente non è così che si usa, vero? no, perché non mi funza :-(
cia' e gra'
	d.
-- 
La bella che guarda il fiume ha un nome che fa paura...
La bella che è addormentata ha un nome che fa paura:
Libertà! Libertà! Libertà!
http://www.pilardeimeli.net

 Sei tu fesso :-P
altra domanda (azz, coi thread non ho proprio dimestichezza :-( )
una volta aperto un thread, in cui si crea un TcpClient, come faccio a
"ammazzare" il thread stesso? la domanda nasce perché a volte ho problemi
di "impossibile chiusura" della finestra, e anche provando a settare a
"nothing" tutti gli oggetti non riesco a venirne a capo...
cia' e gra' di nuo'


 settare a "nothing" tutti gli oggetti non riesco a venirne a capo...
Se non sbaglio con Thread.Abort().
Ma se devi fare solo un operazione asincrona come ti ho detto è meglio il 
componente background worker.


 :-(
Perchè Me.Invoke???
Non devi chiamare la routine dall' altro thread?


 Non devi chiamare la routine dall' altro thread?
si si scusami
ho cuttato troppo :-)
il me.invoke sta dentro una routine che gira come thread separato (come
avevo scritto non aveva senso eheh..)


 Se non sbaglio con Thread.Abort().
non lo trovo
scusami, ho dimenticato un dettagliaccio (agh): sto lavorando per forza di
cose con il CF 1.1... non è che quello di cui parli tu è legato al 2.0?
ciao


 legato al 2.0?
E' del 2.0 purtroppo...


 E' del 2.0 purtroppo...
correggimi, ti prego :-(
2.0 --> solo visual studio 2005, vero?


 (come avevo scritto non aveva senso eheh..)
Strano...
Dovrebbe funzionare...


 2.0 --> solo visual studio 2005, vero?
Tecnicamente si...


 Tecnicamente si...
domanda b
tecnicamente, quante probabilità ho di aprire con VS2005 un progetto x
palmare "nato" con VS2003 e non avere troppi problemi?
cia'


 palmare "nato" con VS2003 e non avere troppi problemi?
Pochissimi se non addirittura nessuno.


 Pochissimi se non addirittura nessuno.
Ovvero, riuscirai di sicuro ad aprire e convertire il progetto.


 Dovrebbe funzionare...
a colpi di debug, ho visto che il funzionamento (anzi: il
non-funzionamento) è identico, sia che io usi il "gioco" dei delegate, sia
che non lo usi.
per capirci, io avanzo nel programma passo per passo con F8, quando arrivo
all'istruzione incriminata (una temibile lblDato.Text = "pippo"), premo
normalmente F8 e non accade nulla. il programma è uscito dall'elaborazione,
è di nuovo in grado di accettare input e non si capisce che ca@@o sia
successo. questo sia che io richiami la funzione normalmente
(ScriviMessaggio()) sia che io la "invochi"...
anche questo, passando da CF 1.1 a CF 2.0 lo potrei risolvere?
ciao


 anche questo, passando da CF 1.1 a CF 2.0 lo potrei risolvere?
Se passi al nt cf 2.0 poi usi il background worker e via.


 avevo scritto non aveva senso eheh..)
il me deve essere il form o il controllo incriminato, cioč qualcuno nel 
thread principale e non nel thread secondario!
Ciao 

 thread principale e non nel thread secondario!
asp che vado in confusione :-)
allora
io ho il mio progettuzzo. dentro il codice di frmProva ci scrivo:
  Private Delegate Sub myDelegate()
quindi nella routine InviaERicevi, faccio partire un thread separato:
  Private Sub InviaERicevi()
    u = New Thread(AddressOf Me.Ricevi)
    u.Start()
  End Sub
il thread è la routine Ricevi, che quando "sente" qualcosa dalla rete
_dovrebbe_ scrivermelo a video. al suo interno c'è:
  Private Sub Ricevi()
    [...]
      Select Case Asc(Mid(DaInviare, 1, 1))
        Case 252
          Status = 1
          Dim aDelegate As New myDelegate(AddressOf MessaggioCartone)
          Invoke aDelegate
      End Select
    [...]
  End Sub
MessaggioCartone è una routinazza scema che cambia il valore di .Text a una
label.
dove sta l'errore? :-(
ciao e grazie


 dove sta l'errore? :-(
Dovrebbe essere corretto.
Se vuoi ti posso inviare una classe che ho fatto per semplificare un attimo 
'sta roba.
Ciao 

 'sta roba.
saresti molto gentile
comincio a temere che il problema sia un'implementazione non corretta della
"faccenda-delegate" all'interno del compact framework 1.x... ma come
dicevo, purtroppo sul palmare su cui devo installare 'sta roba gira Windows
CE 4.2, e temo proprio di non riuscire ne' ad upgradare il sistema
operativo ne' ad installare il compact framework 2.0 (dove con i
backgroundworker FORSE potrei semplificare un po' la faccenda)...
ciao


 backgroundworker FORSE potrei semplificare un po' la faccenda)...
Rilassati: nel CF non ci sono i BGW ;)
Adesso ti invio la classe.
L'indirizzo indicato è corretto?
Ciao 

 L'indirizzo indicato è corretto?
si si
ciao, grazie mille
d.
ps: se sei nei dintorni di milano, ti offro una birra... se non sbaglio
sono già un po' di volte che mi togli le castagne dal fuoco (anche se con
nick diversi eheh)... mi sento in debito... :-)


 si si
cmq, per maggiore sicurezza (a volte despammed despamma un po' alla
cazzo)...
daniele.marino@quel-servizio-google-a-cui-ci-si-iscrive-solo-su-invito :-)
cia' di nuo'
	d.


 Adesso ti invio la classe.
Mhm Fabio, potresti inviarmela anche a me?
Grazie,
