Form.show() non si apre

venerdì 06 marzo 2009 - 14.54

almax Profilo | Junior Member

Salve mi sapreste dire perchè non va il form.show() ecco la sub

Public Sub serverThread()
Try
While True
Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
Dim receiveBytes As Byte()
receiveBytes = udpClient.Receive(RemoteIpEndPoint)
Dim returnData As String = System.Text.Encoding.UTF32.GetString(receiveBytes)
If MsgBox(RemoteIpEndPoint.Address.ToString() & ":" & returnData.ToString() & vbNewLine, MsgBoxStyle.Information) = MsgBoxResult.Ok Then
Form1.Show()
End If
End While
Catch ex As Exception
MsgBox(ex.ToString)
End Try

End Sub

Questa sub riceve un dato in udp ed al suo arrivo deve far partire la form ... il prog lavora dalla notifyicon sulla task ...
Grazie .

Jeremy Profilo | Guru

Ciao Massimo
Non va il form.show() ... è troppo generica come indicazione.
Dai qualche info in più....ti solleva un'eccezione???Il messagebox te lo visualizza???
Form1 è una istanza del Form1 o è l'istanza predefinita????
Ma, sopratutto, qual'è il senso di While True ????

Facci sapere...
Ciao

almax Profilo | Junior Member

Ciao, inatnto grazie ...
Tutte osservazioni lecite ...
Allora per quanto riguarda il form si mi solleva un'eccezione riguardante la sua costruzione ....
Per qunto riguarda quel while dovrebbe creare un ciclo per restare sempre in ascolto .. Mi accorgo ora della inutilità ...
Per quanto rigurda questa utility è creata su un modulo nella sub main utilizzo un thread per avviare questa routine .... Appena ricevo 1 dalla porta devo aprire questa form ...
Spero che sia un pò più chiaro ....

Grazie

Jeremy Profilo | Guru

Ciao Massimo.

>Allora per quanto riguarda il form si mi solleva un'eccezione
>riguardante la sua costruzione ....
Che tipo di eccezzione??

>Per qunto riguarda quel while dovrebbe creare un ciclo per restare
>sempre in ascolto .. Mi accorgo ora della inutilità ...
Non è che sia inutile ... è un modo come un'altro di eseguire un loop continuo(ma io non l'avevo capito) che, in alternativa, potresti sostituire con Do....Loop

>Per quanto rigurda questa utility è creata su un modulo nella
>sub main utilizzo un thread per avviare questa routine .... Appena
>ricevo 1 dalla porta devo aprire questa form ...
Se per thread intendi un thread separato(quindi non quello principale), probabilmente ricevi errore di CrossThread, ciò sta a significare che devi utilizzare un delegate per l'accesso al Form e successivamente a tutti i 'suoi' controlli.

>Spero che sia un pò più chiaro ....
Un pochino si
>
>Grazie
Prego

Facci sapere...
Ciao

almax Profilo | Junior Member

Allora per il discorso del inutile cioè che avrei potuto utilizzare cmq un timer_tick cmq vada per il do loop ..
Per il discorso dell'eccezione eccola : ops .. Già ho scoperto un'arcano .. Una form senza controlli si visualizza appena inserisco il controllo in questo caso webBrowser taaaaaac !!
Impossibile creare un'istanza del controllo ActiveX "una serie di numeri" perchè il thread corrente no è un apartment a thread singolo ... etc
Ho cercato per verificare e sono arrvato alla tua conclusione, utilizzare i delegate ...
Ora sorge un problema come vanno utilizzati ?
Leggendo sulla msdn non mi è rimasto facile capire .. In questo caso come andrebbero utilizzati ?

Ho notato che la form senza controlli si visualizza ma rimane piantata e va forzata la chiusura ...

Per il loop è meglio un timer o un do loop, al momento le risorse occupate sono da 10.952kb appena parte
e 12.788kb appena riceve il comando .. che ne dite ?

Grazie ancora

almax Profilo | Junior Member

Ecco l'errore :
Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Impossibile creare un'istanza del controllo ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' perché il thread corrente non è un apartment a thread singolo.

dettaglio:

Jeremy Profilo | Guru

Ciao Massimo.
Il Form1 lo dichiari nella Sub Main????
Da quello che posso immaginare(vedendo il nome di quello che dovrebbe essere un riferimento all'oggetto Form1) credo proprio di no...quindi prova semplicemente a sostituire Form1.Show() con queste due righe:
Dim Frm1 as new Form1 Frm1.Show
se poi hai bisogno di qualche delucidazione sull'utilizzo dei delegate dai un occhio a questo thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=27911
Se hai bisogno info sul codice da scrivere per l'utilizzo dei delegate dai un ochhio a MSDN oppure fatti sentire.(meglio MSDN)

Facci sapere....
Ciao

almax Profilo | Junior Member

Grandeeee!!! Fichissimo l'esempio ... Vediama se ho capito bene ..
Ho una sub main che apre un thread per mettere in ascolto udpclient
devo creare un delegate per far si che si interrompa il thread di ascolto
aprire la form e gestire il webbrowser ...

Al momento ho utilizzato una strada secondaria, cmq valida (credo)
Ho creato un exe con un webbrowser il thread in ascolto appena riceve il dato
avvia un processo chiamando l'exe .. Funziona tutto alla perfezione .. però il tarlo del delgate mi rimane
mi documento e mi rifarò vivo ..

Grazie

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5