PDA

View Full Version : فعال نگه داشتن فرم در حین انجام کار



nasr
پنج شنبه 24 اردیبهشت 1383, 07:55 صبح
سلام

من یه برنامه دارم که حدود 2 دقیقه طول می کشه تا یک سری متن به یک لیست باکس اضافه کنه

حالا وقتی این عملیات شروع میشه می خوام که بشه در لیست باکس کاری انجام داد یا مثلا فرم را Minimize کرد

چون در این حالت هیچ کاری نمیشه انجام داد می خوام کار بر بتونه در حین اضافه کردن اطلاعات به لیست باکس کار بر حتی بتونه اون را کنسل کنه

با تشکر

مهدی کرامتی
پنج شنبه 24 اردیبهشت 1383, 08:22 صبح
احتمالا شما عناصر را در یک حلقه به ListBox اضافه میکنید.

در پایان حلقه یا پردازش فوق دستور Application.ProcessMessages را اضافه کنید.

JavanSoft
پنج شنبه 24 اردیبهشت 1383, 14:47 عصر
اگر واقعا نیاز است که تمامی عناصر به لیست شما اضافه شوند یکی از راههای کاهش زمان
1) مخفی کردن لیست بهنگام اضافه شدن است ...بدین ترتیب شمان نمایش کاهش پیدا می کند
2) اگر لیست شما ثابت است از دستورات
ListBox1.Items.LoadFromFile , ListBox1.Items.SaveToFile
نیز این زمان را بشدت کاهش دهید

nasr
پنج شنبه 24 اردیبهشت 1383, 19:42 عصر
سلام و تشکر

ببینید اگه برنامه های ویروس کش را دیده باشید وقتی دکمه Scan را فشار می دیم همه کلید ها غیر فعال شده بجز کلید Cancel در حالیکه میشه فرم را جابجا کرد Minimize کرد و مراحل کار ویروس یابی را هم دید

حالا من هم همین کار را می خوام انجام بدم

یعنی درحالیکه برنامه داره اجرا می شه کار بر بتونه این کار ها را انجام بده بهتر بگم انگار نه انگار که برنامه داره کاری انجام میده خودش فایلها را یکی یکی پیدا کنه و به کار بر نشون بده

ممنون

vcldeveloper
سه شنبه 29 اردیبهشت 1383, 01:39 صبح
در ساده ترین حالت ممکن می تونید از همون راهنمایی آقای کرامتی استفاده کنید.
اگر غیر از حرکت دادن فرم و مساپل مربوط به ظاهر فرم می خواید کار دیگه ای هم همزمان انجام بشه باید اونها رو در یک Thread جداگانه اجرا کنید.

said ali
سه شنبه 29 اردیبهشت 1383, 16:11 عصر
با سلام
اقا این thread رو که بارها توضیح دادین باز هم نفهمیدم چیه.(احتمالا مشکل از منه) میشه یه مثال بزنید در همین مورد و مرتبط با همین تاپیک استفاده کنیم.
با تشکر فراوان.

vcldeveloper
چهارشنبه 30 اردیبهشت 1383, 01:58 صبح
هر وقت که برنامه ای شروع به اجرا شدن میکنه ویندوز یه (سر نخ) Thread به اون اختصاص میده. این Thread در واقع رایط بین برنامه و CPU محسوب میشه.
همونطور که میدونید CPU برای اینکه بتونه چند وظیفه رو بطور همزمان انجام بده، به هر Thread یک زمان مشخص اختصاص میده (با توجه به الویت اون Thread)
مثلا اگر ما دو Thread در حال اجرا داشته باشیم. CPU به اولی یه زمانی رو اختصاص میده تا کارهاش رو انجام بده. بعد از اتمام زمان اختصاص یافته CPU سرنخ اول رو متوقف میکنه و سرنخ دوم رو اجرا میکنه و این کار همینطور ادامه پیدا می کنه.
هر برنامه Win32 حداقل یک سرنخ داره که بهش سرنخ اصلی گفته میشه. حالا فرض کنیم برنامه شما باید چند کار سنگین و همزمان رو انجام بده. فرضا هم باید یک محاسبه سنگین ریاضی رو انجام بده و هم یه سری شکل روی فرم رسم بکنه (بطور همزمان) . خب در حالت عادی برنامه شما فقط یه سرنخ داره و همه این کارها باید از طریق همون یه سرنخ انجام بشه. یعنی اگه محاسبه شما طول بکشه و تمام زمان اختصاص یافته به سرنخ رو استفاده کنه CPU بدون اینکه شکلها رو روی فرم رسم کنه میره سراغ سرنخ بعدی. تا اینکه دوباره نوبت به سرنخ برنامه شما برسه. حالا اگه محاسبه ریاظی هنوز تموم نشده باشه بازم محاسبه ادامه پیدا میکنه و شکلی رسم نمی شه!!!
اگر بخواییم که محاسبه ریاضی تاثیری بر رسم شکل نداشته باشه باید هر کدوم از اونها رو در یک سرنخ اجرا کنیم. مثلا رسم شکل در سرنخ اصلی برنامه و محاسبه ریاضی در یک سرنخ فرعی.
الان دیگه محاسبه ریاضی و رسم شکل نمی تونند روی هم تاثیر بذارند چون CPU با هر کدوم از اونا مثل به پردازش جدا و مستقل برخورد میکنه و هر کدوم میتونند از زمانی که CPU در اختیارشون قرار میده بنحو احسن استفاده کنند. این میشه یه برنامه چند سرنخی (Multi-Threading) .

می دونم توضیح ناقصیه ولی چه کنم که ساعت 2:30 AM مغزم بیشتر کار نمیکنه! :roll:

مهدی کرامتی
چهارشنبه 30 اردیبهشت 1383, 07:22 صبح
اتفاقا توضیح خوبی بود! :)

مرسی.

Panje Tala
چهارشنبه 30 اردیبهشت 1383, 08:20 صبح
باسلام
منهم در یک برنامه چنین مشکلی داشتم که با راهنمایی آقای کرامتی در استفاده از Thread مشکلم بطور کامل حل شد. اگه نتونستی از Thread استفاده کنی بنویس تا یک نمونه کد رو برات بفرستم.

said ali
دوشنبه 04 خرداد 1383, 12:07 عصر
با سلام
با تشکر فراوان.اقا یه نمونه کد هم بزاری خیلی ممنون میشم.