Scusate.. in effetti all'inizio volevo un parere sul "metodo" aldilą del codice.. comunque vi posto il codice, che per me č anzi molto meglio

Ho AForge.NET che mi inizializza la webcam e mi da, sotto forma di evento, ogni frame catturato..(Webcam.videosource.NewFrame)

eppoi la classe che manda il tutto che č questa
Nell'invio vero e proprio aspetto il messaggio "sendframe".. se ce l'ho posso inviare il frame e allora prima mando un mess "sendsize" informando l'altra macchina che sto per inviare la grandezza.. poi invio la grandezza (cosģ che l'altra macchina preparare un byte[] di quella grandezza).. aspetto l'altra conferma ed invio!!

Codice PHP:
    public partial class Form1 Form
    
{
        
        
//Numero incaricati al trasporto

        
Queue<Bitmap>[] queueFrames = new Queue<Bitmap>[3];
        
Thread[] thread = new Thread[3];
        
TcpClient[] client = new TcpClient[3];

        public 
Form1()
        {
            
InitializeComponent();
            
inizializzaCode();
        }

        private 
void inizializzaCode()
        {
            for (
int i 03i++)
                
queueFrames[i] = new Queue<Bitmap>();
        }

        private 
void button1_Click(object senderEventArgs e)
        {
            
Webcam.getDevices();
            
Webcam.startFrame(0);
            
Webcam.videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame);
            for (
int i 03i++)
            {
                
thread[i] = new Thread(new ParameterizedThreadStart(sendFrame));
                
thread[i].Start(new object[] { queueFrames[i], client[i] });
            }
        }

        
int indexcoda 0;
        
void videoSource_NewFrame(object senderAForge.Video.NewFrameEventArgs eventArgs)
        {
           
//inserisco sequenzialmente in ogni coda diversa i frame catturati
            
if (indexcoda == 2)
            {
                
queueFrames[indexcoda].Enqueue((Bitmap)eventArgs.Frame.Clone());
                
indexcoda 0;
            }
            else
            {
                
queueFrames[indexcoda].Enqueue((Bitmap)eventArgs.Frame.Clone());
                
indexcoda += 1;
            }
        }

        
        private 
void sendFrame(Object obj)
        {
            
object[] objs = (object[])obj;
            
Queue<Bitmapqueue = (Queue<Bitmap>)objs[0];
            
TcpClient client = (TcpClient)objs[1];

            
//Connessione e stream
            
IPHostEntry addr Dns.GetHostEntry("indirizzomio");
            
StringBuilder sb1 = new StringBuilder();
            
client = new TcpClient(addr.AddressList[0].ToString(), 9999);
            
NetworkStream stream client.GetStream();
            
StreamWriter sWriter = new StreamWriter(stream);
            
StreamReader sReader = new StreamReader(stream);
            
/////////////////////

            //Gestione compressione JPEG
            
ImageCodecInfo jgpEncoder GetEncoder(ImageFormat.Jpeg);
            
System.Drawing.Imaging.Encoder myEncoder System.Drawing.Imaging.Encoder.Quality;
            
EncoderParameters myEncoderParameters = new EncoderParameters(1);
            
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder50L);
            
myEncoderParameters.Param[0] = myEncoderParameter;
            
////////////////////////////

            //Ciclo invio frames
            
byte[] data;
            while (
true)
            {
                try
                {
                    if (
queue.Count 0)
                    {
                        
sb1.Append(sReader.ReadLine());
                        if (
sb1.ToString().Contains("sendframe"))
                        {
                            if (
client.Connected)
                            {
                                
//connesso
                                
StringBuilder s2 = new StringBuilder();
                                
MemoryStream mStream = new MemoryStream();
                                
                                    
queue.Dequeue().Save(mStreamjgpEncodermyEncoderParameters);
                                    
mStream.Position 0;
                                    
data = new byte[mStream.Length];
                                    
mStream.Read(data0Convert.ToInt32(mStream.Length));
                                    
mStream.Close();
                                    
s2.Append(data.Length);
                                    
sWriter.WriteLine("sendsize");
                                    
sWriter.Flush();
                                    
sWriter.WriteLine(s2);
                                    
sWriter.Flush();
                                    if (
sReader.ReadLine().Contains("oksend"))
                                    {
                                        
stream.Write(data0data.Length);
                                    }

                                    
mStream.Close();
                                
                                
                            }
                            else
                            {
                                
//non connesso
                                
break;
                            }
                        }
                    }
                }
                catch (
Exception ex)
                {
                }
            }
            
////////////////////
        
}

        private 
ImageCodecInfo GetEncoder(ImageFormat format)
        {

            
ImageCodecInfo[] codecs ImageCodecInfo.GetImageDecoders();

            foreach (
ImageCodecInfo codec in codecs)
            {
                if (
codec.FormatID == format.Guid)
                {
                    return 
codec;
                }
            }
            return 
null;
        }
    }