اگه نخواهیم اینجوری بشه باید چکار کرد؟
اگر توی همین بخش Synchronize را جستجو می کردید، به جوابتون می رسیدید.

بطور خلاصه، متد Synchronize یک روش ابتدایی برای همزمان سازی Threadها هست. در این روش، موقع اجرای متد، Thread مورد نظر متوقف میشه، و تابع مورد نظر توسط Synchronize در Context مربوط به Thread اصلی اجرا میشه. یعنی عملا در لحظه اجرای کد مربوطه توسط Synchronize دو Thread که بصورت موازی در حال اجرا بودند، بصورت سری (پشت سر هم) اجرا میشند. برای همین هم Synchronize فقط بدرد همزمان سازی های ساده میخوره.

برای کارهای پیچیده تر، یا کارهایی که نیاز به کارایی بالاتری دارند، باید از روش های دیگه ایی استفاده کرد. مثلا برای بروز رسانی رابط کاربر، ارسال پیام به Thread اصلی که مسئولیت بروز کردن رابط کاربر را داره، بهترین گزینه هست، چون نه Thread مورد نظر متوقف میشه، نه Thread اصلی نیاز داره کار فعلی خودش را متوقف کنه و بالافاصله درخواست Thread شماره 2 را اجرا کنه. پیام میره به صف پیام های Thread اصلی و Thread اصلی آن را پردازش میکنه. Thread شماره 2 هم بعد از ارسال پیام نیازی نداره منتظر باشه، بکارش ادامه میده.

درباره اینکه چرا باید رابط کاربر همیشه از طریق Threadایی که آن را بوجود آورده، تغییر داده بشه هم توضیح داده شد، و گفته شد که این یکی از ضروریاتی هست که Win32 اعمال میکنه.