نوشته شده توسط
babak1
سلام :
"ساده ترین راه برای جلوگیری از Not Respond شدن برنامه در حلقه های طولانی
برنامه تمامی message های درون message queue فعلی (از قبیل رخدادها و ...) را پردازش میکند."
میشه بیشتر توضیح بدید. به نظر میرسه که اینطوری حلقه طولانی تر میشه ؟؟ دقیقا Doevent() به درد چی می خوره ؟
application.DoEvent();
ببینید
اگه شما بخواهید توی یک حلقه از 1 تا 1000000000 رو توی یک لیست بریزید
حلقه وقتی از 1 گذشت و به 2 رسید دستور نوشتن 1 رو تو لیست بوکس میده اما چون سرعت سی پی یو خیلی بالاست اینا میرن تو صف بعد که برنامه وقتی حلقه رو تموم کرد اینا رو اجرا کنه مثلا وقتی بخواهیم فرم رو حرکت بدیم میره تو صف بنویسه . سیستم عامل هم چون می بینه عمل تکون دادن فرم ارجع هست فرم رو نات رسپوندینگ میکنه ولی برنامه اون پشت داره کارشو انجام می ده و برای همینه که ما فکر میکنیم برنامه قفل کرده هست
حالا اگه تو حلقه بنویسی
application.DoEvent();
application.invalidate();
(شاید غلط املایی داشته باشه)
هروقت به این کد ها برسه اول اون کارایی که تو صف بوده (یعنی نوشتن تو لیست بوکس یا اینکه مثلا فرم را با ماوس تکون بدی)
رو انجام میده بعد میره ادامه حلقه رو انجام می ده و چون تو حلقه هست هر بار اجرا می شه و ما فکر می کنیم که برنامه راحت داره کار می کنیم
توسرعت برنامه تاثیر مثبت نداره