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

▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
▪ Illegal aliens have always been a problem in the United States. Ask any Native American