Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Membro Junior L'avatar di xam85it
    Registrato dal
    Nov 2003
    Messaggi
    64

    [VB 2005 Express]Problema con eventi

    Ho creato una chat utilizzando i socket di sistema (tcpClient e tcpListener, contenuti in system.net.sockets) ho creato quindi una dll ke mi fa da interfaccia per questi socket. Il problema per ora me lo da nella parte che fa da server,ma darebbe lo stesso errore nella parte client.Dopo aver avviato il server
    codice:
    Public Sub startServer()
            'metodo ke lancia l'ascolto del server
            socketListener = New TcpListener(localIp.IpMyIpAddress, port)
            createThread(New System.Threading.ThreadStart(AddressOf serverListening))
    
        End Sub
        Private Sub serverListening()
            Dim maskTcp As New TcpClient
            Try
                socketListener.Start()
                stateConn = True
    
                While True
                    maskTcp = socketListener.AcceptTcpClient'chiamata bloccante
    e sino a qui tutto a posto,
    dopo aver ricevuto una richiesta di connessione genero un evento che la notifica:
    codice:
    RaiseEvent connectionOpened(maskTcp.GetHashCode)
    il problema arriva ora. nella form in cui gestisco questa notifica in questo modo:
    codice:
     
    Private Sub sktServer_connectionOpened(ByVal socketIndex As Object) Handles sktServer.connectionOpened
            lstLog.Items.Add(Now.ToLongTimeString & " Connesso il client n° " & socketIndex.ToString)
        End Sub
    mi genera questo errore:
    System.InvalidOperationException was caught
    Message="Cross-thread operation not valid: Control 'lstLog' accessed from a thread other than the thread it was created on."
    Source="System.Windows.Forms"
    StackTrace:
    at System.Windows.Forms.Control.get_Handle()
    at System.Windows.Forms.Control.SendMessage(Int32 msg, Int32 wparam, String lparam)
    at System.Windows.Forms.ListBox.NativeAdd(Object item)
    at System.Windows.Forms.ListBox.ObjectCollection.AddI nternal(Object item)
    at System.Windows.Forms.ListBox.ObjectCollection.Add( Object item)
    at soket.Form1.sktServer_connectionOpened(Object socketIndex) in C:\Documents and Settings\Administrator.GIULIANINET\Documenti\soket \soket\soket\Form1.vb:line 47
    at socketLib.socketServer.serverListening() in C:\Documents and Settings\Administrator.GIULIANINET\Documenti\soket \soket\socketLib\socketServer.vb:line 64
    come posso risolvere questa cosa? a mio parere è un qualcosa sulla sicurezza, perchè lo stesso programma in vb.net non da problemi. ma per necessità devo farlo in vb 2005(per ora express poi acquisterò il professional)Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Cross-thread operation not valid: Control 'lstLog' accessed from a thread other than the thread it was created on.
    pare un problema di thread,del tipo che il thread secondario non possa accedere alla listbox lstLOg.Cross-thread

  3. #3
    Membro Junior L'avatar di xam85it
    Registrato dal
    Nov 2003
    Messaggi
    64

    nn so ke sia...

    Il thread viene lanciato dalla libreria, questo thread tiene controllato il buffer di lettura del socket, nel momento ke si ricevono dati, il thread notifica l'avvenuta ricezione. questo evento viene gestito nella parte GUI del programma, dando però l'errore riportato. per ora l'ho risolto in un modo un po brutale (le stringhe che devo insere in questi log le metto in un array per poi ogni secondo aggiungerli al controllo, ma si crea un overhead notevole

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.