To je zato sto BeginSend i EndSend predstavljaju asinhrone operacije za Send() metod, medjutim ako ti pozivas EndSend odmah posle BeginSend, to ti dodje na isto kao da si samo koristio Send() posto ce EndSend da zablokira aktivni thread dok se transfer ne zavrsi. Znaci imas dve opcije:
1. Umesto BeginXXX i EndXXX asinhronih operacija koristi sinhronu XXX() operaciju, u ovom slucaju Send() koji jeste podrzan u WindowsCE. Downside je da sinhrone operacije blokiraju thread dok se podaci ne posalju, sto u slucaju dugih timeout-ova moze da ucini tvoju aplikaciju veoma "ukocenom".
2. Napravi zaista ainhroni proces. Iskoristi callback parametar BeginSend metoda da prosledis event koji ce biti pozvan iz worker thread-a posle BeginSend(). Iz njega pozoves EndSend() i zablokrisa worker thread do zavrsetka slanje, i posle EndSend() posalji GUI event call u pozivnu formu da je obavestis da je transfer zavrsen. Za tu svrhu koristis Form.Invoke() koji je takodje podrzan na CE.
Jos jedna vazna stvar, kad koristi Begin/End asinhorne operacije, povratak iz EndSend ne znaci da su svi podatci iz socketa poslati, vec da poslat odredjeni broj bajtova (i taj broj ti se vraca kao rezultat EndSend()). To uporedis sa velicinom bufera i ako nisu svi bajtovi poslati mozes iz samog callback-a da napravis novi BeginSend koji koristi isti callback, u principu petlju dok god se buffer ne isprazni. Dobra stvar sa ovim je sto usput mozes da obavestavas formu da je deo buffera poslat, sto moze da se iskoristi za lepi progress bar u formi

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić