"Aggiornamento" finestra e gestione messaggi da una socket

venerdì 15 dicembre 2006 - 15.31

JohnAsh Profilo | Junior Member

Ciao a tutti,

sto sviluppando in VC++ un'applicazione di messaggistica instantanea, ho completato il server ed il client. Ora però mi trovo di fronte ad un piccolo problema relativo alla ricezione di un messaggio. Ho strutturato il client in questo modo:

- Avvio di un background worker che avvia un ciclo infinito in attesa di messaggi
- Ricezione messaggio
- Inserimento in un ArrayList globale
- Richiamo della finestra di conversazione (se inesistente viene creata)

Nel caso in cui la finestra di conversazione non è aperta allora ne apro una e tutto funziona regolarmente (il messaggio viene visualizzato correttamente nella richtextbox) ma nel caso in cui la finestra è già aperta (visualizzata a schermo, non ridotta) non riesco a trovare un metodo che faccia "aggiornare" il contenuto della finestra (prelivo del messaggio dall'arraylist globale e visualizzazione nella richtextbox).

Come potrei fare per risolvere questo problema? Tenendo conto che dal background worker, una volta arrivato il messaggio, cerco l'handle della finestra utilizzando FindWindow() e ne ricavo poi un control tramite Control::FromHandle(), io avevo pensato di "giocare" un pò sugli eventi (enter, validating, activated ...) ma non mi hanno dato nessun risultato positivo. Per ora mi sono limitato a richiamare prima il metodo Hide() e successivamente Show() e la finestra si aggiorna, ma ovviamente questa soluzione implica una fastidiosa scomparsa della finestra e poi subito una rivisualizzazione.

Inoltre, volevo sapere se esiste una soluzione alternativa per la gestione dei messaggi, vorrei evitare l'uso dell'arraylist, avevo pensato all'utilizzo di una lista lineare ma non ho la minima idea di come si implementino in VC++ e su google non sono riuscito a trovare qualcosa di semplice che trattasse l'argomento.

Grazie in anticipo,
ciao!
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