ciao ragazzi,
ho bisogno di una mano...
ho un form chiamato form3 in cui ho delle listview. Un altra classe AscoltoAggiunte riceve le modifiche da fare alle listview e deve effettuare gli aggiornamenti delle listview stesse che sono nel form3.
Essendo in due classi diverse devo utilizzare i delegati per modificare le liste del form3 dall'AscoltoAggiunte?
Io li ho usati, ma non sempre mi funzionano perchè? A volte aggiungono tranquillamente la voce alla lista altre volte mi da errore.. altre volte nn fa niente. Ho pensato di aver sbagliato il server che ascolta....
Vi posto il codice:
codice:
public class AscoltoAggiunte
{
Form3P modifica;
public AscoltoAggiunte(Form3P mod)
{
modifica = mod;
}
public void avvia()
{
try
{
TcpListener TcpList = new TcpListener(8083);
Byte[] bytes = new Byte[256];
String str = null;
TcpList.Start();
while (true)
{
TcpClient cl = TcpList.AcceptTcpClient();
NetworkStream mess = cl.GetStream();
int i;
while((i=mess.Read(bytes, 0, bytes.Length))!= 0)
{
// Converto bytes in stringa
str = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
}
....
elabora la stringa ricevuta
....
try{
modifica.Invoke(modifica.myDelegate, new Object[] { codice.ToString(), descrizione, categoria });
return;
}catch(Exception ex){
Console.WriteLine("eccezione invoke: {0}", ex.ToString());}
cl.Close();
}//chiuso while
//chiuso try
//chiuso avvia
codice:
public partial class Form3P : Form
{
.....
public delegate void AddListItem(String codice, String descrizione, String categoria);
public AddListItem myDelegate;
public Form3P(String nFile,String indirizzoS)
{
InitializeComponent();
myDelegate = new AddListItem(AddListItemMethod);
// creo le liste
}
//faccio partire ascolto aggiunte
public void AddListItemMethod(String codice,String descrizione, String categoria)
{
//creo voce per la lista
ListViewItem f = new ListViewItem(codice.ToString());
f.SubItems.Add(descrizione);
f.SubItems.Add("0");
//aggiungo nella lista corretta
if (categoria.Equals("EXTRA"))
{
listaExtra.Items.Add(f);
}
else if (categoria.Equals("PRIMI"))
{
listaPrimi.Items.Add(f);
}
ecc..
}
}
Grazie