مشاهده نسخه کامل
: نمایش لودینگ در زمان اجرای دستورات
Ehsan-l-able
05-02-2013, 12:51
زمانی که روی یک دکمه کلیک می کنم به دلیل ارسال درخواست و انتظار برای پاسخ ، برنامه من چند لحظه قفل میکنه !! میخوام یک تصویر لودینگ با فرمت gif رو نمایش بدم که بعد از اتمام دستورات مخفی بشه !!
در ضمن بنا به دلایلی از Background Worker هم نمی خوام استفاده کنم .
دوستان عزیز چه راهی پیشنهاد می کنند ؟؟؟؟؟؟
یکسری نکات را برای شما یادآوری می کنم که مفید هستند:
1- هر برنامه در ابتدا یک پروسس دارد.
2- پروسس شما یک Thread دارد.
3- این Thread در یک لحظه فقط به یک چیز پاسخ می دهد.
4- سیستم عامل این Thread رو به کاربر و رابط فرم اختصاص می دهد.
5- تمام event های فرم توسط این Thread هندل خواهد شد.
6- اگر این Thread مشغول شود مطمئنا فرم Not Respond خواهد شد.
پس برای pictureBox نیز NotRespond خواهد بود. که وظیفه پخش انیمشن شما را دارد و انیمشن متوقف می شود.
پس شما راهی جز جدا کردن Thread اصلی از کد های خودتان ندارید یا اینکه در زمان های تاخیر با DoEvent از کلاس Application از Thread اصلی بخواهید که یکسری هم به فرم بزند.
جداسازی ها معمولا با Thread و BackgroundWorker هستند.
فکر کنم این مطلب ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای شما مفید باشد.
موفق باشید.
Ehsan-l-able
06-02-2013, 14:47
فکر کنم این مطلب ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای شما مفید باشد.
موفق باشید.
از راهنمایی خوبتون ممنونم ولی یه سوال در اون مبحث که هر پروسس یک Thread داره و برای اجرای سایر دستورات مورد نیاز به صورت موازی یک Thread دیگر رو به کار میگیریم به نظر میاد این Thread دوم زیاد قدرت Thread اصلی رو نداره ، برنامه رو وقتی داخل شبکه اجرا می کنم نمیتونه درخواست منو ارسال کنه ! اما بدون background worker درست اجرا میشه . به نظر شما مشکل کجاست ؟
یک مشکل در تبدیل کدتان برای BackgroundWorker هست وگرنه غیر منطقی است مگر اینکه کار شما سینک باشد و یا اینکه خیلی وایسته به زمان باشد.برای یک توضیح بیشتر:کد هایی که توسط این کلاس اجرا می شوند با تاخیرهای خاصی از طرف سیستم عامل رو به رو هستند.(آخرین پاراگراف اون مطلب رو بخوانید.)
اگر از Thread استفاده کنید حتی می توانید زمان بندی CPU رو بیشتر از Thread اصلی کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کار از طریق Priority ترید مورد نظر شما انجام می شود.(اطلاعات بیشتر ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]))
( نکته: هرگز Thread ی که وقفه های طولانی دارد مثلا در یک حلقه یک پورت را پولینگ کند را با اولویت بالا تنظیم نکنید چرا که روند عادی سیستم عامل مختل خواهد شد و احتمال قفل سیستم عامل وجود دارد مخصوصا در پردازنده های تک هسته ای.)
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.