واضح آرشیو وب فارسی:سایت ریسک: M-B-M25-10-2008, 04:44 PMسلام چطور می شود وقتی که کاربر روی یک دکمه کلیک می کند و پردازش اطلاعات طولانی انجام می شود به کاربر پیغام مرتبط نمایش داده شود و یا یک شی مانند progressBar در StatusBar در هنگام شروع پردازش اطلاعات شروع به کار کند و در هنگام پایان پردازش کامل شود (در ضمن فرم را چگونه می توان قفل کرد که کاربر روی فرم نتواند کلیک کند) hamidreza_buddy25-10-2008, 11:00 PMاینجا یه نمونه هست. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حتماً حواست باشه اگه پردازشت خیلی طول می کشه اون رو از توی یک thread اجرا کنی و سپس مقادیر progressbar رو از تو اون اجرا کنی. به این دلیل که اگه پردازشت طول یکشه برنامت not responding میشه و هیچ رویداد event رو نمی گیری. حتی نمی تونه خودشو paint کنه. برای thread هم می تونی از کنترل BackgroundWorker استفاده کنی. یه راه دیگه برا نمایش درصد پیشرفت برنامه اینه که یه Form ایجاد کنی که توش یه progressbar داشته باشه و سپس اون رو show کنی و از توی یه thread اونو جلو ببری. همچنین اگه پردازش طولانیه یه دکمه Stop هم حتماً بذار. M-B-M26-10-2008, 08:20 PMسلام لطفا جواب سئوال رو ابتدایی و شمرده شمرده بفرمایید چون من مثل شما حرفه ای نیستم hamidreza_buddy28-10-2008, 05:28 PMprogressbar: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! شما مرحله مرحله جلو برید تا مشکلات کار دستتون بیاد. مثلاً مرحله اول یه progressbar بذارید توی form و از اون استفاده کنید. اگه موفق شدید، مرحله بعد سعی کنید اونو توی statusbat بگذارید. مرحله بعد هم باید سعی کنید همزمانی ها رو درست کنید. پس شما اول یه progressbar ساده توی فرمتون بذارید و ار اون استفاده کنید. موفق شدید برید مرحله بعد و اگه در این حین سئوالی واستون پیش اومد بپرسین. M-B-M20-02-2009, 06:05 PMسلام لطفا این مورد بیشتر توضیح بفرمایید... حتماً حواست باشه اگه پردازشت خیلی طول می کشه اون رو از توی یک thread اجرا کنی و سپس مقادیر progressbar رو از تو اون اجرا کنی. به این دلیل که اگه پردازشت طول یکشه برنامت not responding میشه و هیچ رویداد event رو نمی گیری. حتی نمی تونه خودشو paint کنه. برای thread هم می تونی از کنترل BackgroundWorker استفاده کنی. طریقه ساخت BackgroundWorker و thread کردن رویدادها? M-B-M23-02-2009, 12:16 AMPlease Help Me! M-B-M26-02-2009, 02:44 PMلطفا کمک!!! Payman_6226-02-2009, 07:33 PMسلام. برای کار با تردها میتونی از کلاس System.Threading.Thread کمک بگیری. برنامت حرفه ای تر میشه. هنگامی که شما از ترد ها استفاده کنید چند کار با هم انجام میشه. مثلا تو یه ترد پردازش انجام میشه و در این صورت برنامه قفل نمیشه و میتونه به کارای دیگه برسه. M-B-M26-02-2009, 11:10 PMاگه میشه لطف کنید بیشتر توضیح بدین چون من بار اوله که این اسم رو میشنوم!!! M-B-M26-02-2009, 11:11 PMلطفا طریقه کار را توضیح بدین؟؟؟ Payman_6227-02-2009, 06:30 PMسلام. لطفا پست تکراری و بی محتوا نفرستید. این روش کار بار تردها. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! M-B-M01-03-2009, 12:49 AMلطفا پست تکراری و بی محتوا نفرستید. شرمنده دوتا پست تولید شد، نشد یکیشو پاک کنم! در مورد کدهاتون هم اگه بیشتر میشد بیشتر توضیح میدادین ممنون میشدم! مثلا میفرمودید که چگونه دو عدد Thread ایجاد شده (مثلا دستورات Login برنامه را با دستورات جلو بردن ProcessBar) هماهنگ کنم (بطوری که وقتی اعتبار سنجی نام کاربری و رمز عبور تمام می شود، شی ProcessBar نیز به انتها برسد) am_merman0101-03-2009, 01:10 AMسلام خدمت دوستان عزیز دوست من شما ظاهرا در کل در این مورد چیزی نمیدونی پس بهتره که یه کمی در مورد thread یا همون چندریسمانی توی اینترنت تحقیق کنی و نتایج زیادی به دست میاری . ولی در کل بهتون بگم که در حالت عادی برنامه شما تقریبا به صورت خطی پیش میره و تا زمانی که یک دستور به پایان نرسه دستور بعدی اجرا نمیشه. ولی در حالت استفاده از چند ریسمان در برنامه شما میتونید به طور همزمان چند دستور رو به موازات هم اجرا کنید و با دستوراتی که مینویسید میتونید در هر لحظه که دوست دارید هرکدوم از ریسمان هارو که میخواید متوقف کنید و یا به شکل کامل از کار بیاندازید و حتی تقدم و تاخر ریسمان ها رو تعیین کنید و ..... و چون بحث یه کم طولانیه (ولی خیلی سادس) بهتره که خودت در موردش یه کم تحقیق کنی بعد راحت تر میشه بهتون کمک کرد تا مشکلاتتون رو رفع کنید. Arshia 00101-03-2009, 05:18 PMخوب بابا لابد بنده خدا نمیدونه ترد چیه!زور که نیست! اگه حالشو داری ترد یاد بگیری که هیچ،ولی اگه حسش نیست خیلی راحت میتونی به برنامت بگی خودشو باز-تازه سازی! کنه.این دستورو آخر حلقه یا بین خط های کد بنویس: Windows.Forms.Application.DoEvents() اینجوری هر چند وقت یه بار خود فرم خودشو باز-تازه سازی(چیه مگه؟خوب کلمه اختراع کردم!همون Refresh خودمونه!) میکنه.هم Event ها رو میگیری هم ProgressBar هات کار میافتن.اگه مشکلی داشتی پ.خ. بده کامل توضیح بدم واست. am_merman0101-03-2009, 11:49 PMسلام خدمت دوستان عزیز ارشیا جان نظر شما هم جالب و سریع و تقریبا کارآمده. البته من تا حالا از این روش استفاده نکرده بودم. میخواستم بدونم این دستور همون کار دستور Me.Refresh() رو انجام میده یا چیز متفاوتی هستش؟ Payman_6202-03-2009, 02:57 AMسلام. نه me.refresh نیست. کلی تره. کلا یه فرصت به انجام کارهای عقب افتاده میده. مثلا اگه داخل یه حلقه طولانی باشیم یه فرصت کوتاه میده تایمر ها هم اجرا بشن. M-B-M02-03-2009, 10:41 AMلطفا یکی هم ما رو تحویل بگیره!!!!!!!!!!!!!!! من یک فرم درست کردم و یک ProcessBar توش گذاشتم زمانی که کاربر روی دکمه login کلیک می کند، بطور دستی تعداد کل دستوراتی که برای دکمه Login نوشته ام را شمرده ام (در هنگام Design) و MaxValue شی ProcessBar را در اولین خط رویداد کلیک برابر با آن قرار دادم و پس از اجرای هر خط دستور یک واحد مقدار Value شی ProcessBar را زیاد کرده ام، و با این کار نتیجه ای که من میخواهم حاصل میشود اما راه اصولی و قابل قبولی نیست!!! میخواستم ببینم چگونه می توان این کار را بطور اصولی پیش برد؟؟؟؟ Payman_6202-03-2009, 02:27 PMسلام. این کار اصلا منطقی نیست. شاید یه خط 10 ثانیه طول بکشه یه خط 1 میکروثانیه. پروگرس شما کند و تند و غیر یکنواخت پر میشه. ضمن این که کار برنامه نویسی شما 2 برابر شده. فرض کنید 50 خط کد بود چه دردسری داشت. حجم برنامه هم بی دلیل افزایش پیدا میکنه. مگه لاگین کردن یوزر چه قدر زمان میبره که پروگرس گذاشتی؟ بیشتر از 10 ثانیه طول میکشه؟ یه پیغام چند لحظه صبر کنید... نمایش بده. M-B-M03-03-2009, 01:38 AMسلام. این کار اصلا منطقی نیست. شاید یه خط 10 ثانیه طول بکشه یه خط 1 میکروثانیه. پروگرس شما کند و تند و غیر یکنواخت پر میشه. ضمن این که کار برنامه نویسی شما 2 برابر شده. فرض کنید 50 خط کد بود چه دردسری داشت. حجم برنامه هم بی دلیل افزایش پیدا میکنه. مگه لاگین کردن یوزر چه قدر زمان میبره که پروگرس گذاشتی؟ بیشتر از 10 ثانیه طول میکشه؟ یه پیغام چند لحظه صبر کنید... نمایش بده. دوست عزیز من لاگین را مثال زدم که دقیقا قابل لمس باشد!!! بعد هم گفتم که این کار درستی نیست و از شما خواستم بفرمایید که راه حل اصولی آن چیست؟ Arshia 00103-03-2009, 03:33 PMسلام خدمت دوستان عزیز عرشیا جان نظر شما هم جالب و سریع و تقریبا کارآمده. البته من تا حالا از این روش استفاده نکرده بودم. میخواستم بدونم این دستور همون کار دستور Me.Refresh() رو انجام میده یا چیز متفاوتی هستش؟ Refresh فقط فرم رو از نو زنده میکنه و به هیچ کدوم از Event ها اجازه ی اجرا شدن نمیده(اینو تست کردم).با یک کد طولانی هم اگه رو فرم کلیک کنی(مثلا) کلا از کار میافته(اینم تست کردم!اصلا از همینجا بود که DoEvents رو کشف کردم!) در حالی که DoEvents به کل برنامه اجازه میده هر کار میخواد بکنه.یعنی اگه یک Module داشته باشی و توش یه فرم تعریف کنی بعد یه DO Loop بذاری و خط آخرش بنویسی Application.DoEvents اونوقت عین اینه که یه Windows Forms Application داری! فقط به خاطر تو امضامم عوض کردم.ببین خط آخرش یاد چیزی نمیندازدت؟!:31: دوست عزیز من لاگین را مثال زدم که دقیقا قابل لمس باشد!!! بعد هم گفتم که این کار درستی نیست و از شما خواستم بفرمایید که راه حل اصولی آن چیست؟ اگه یه کد خیلی طولانی داشته باشی معمولا حلقست.اگه اینطور نیست سعی کن مقداری که هر دستور طول میکشه رو تخمین بزنی بر اون اساس چند خط یه بار آپدیت کنیش.چون راه خاصی نداره کاری که میخوای بکنی(یا حداقل من بلد نیستم).این کار شبیه Loading بازی ها میشه که چند وقت یه بار میپرن.اونم همچین حالتیه. ضمنا حواست باشه که Refresh کردن فرم کار زمان گیریه و میتونه زمان اجرای کدتو خیلی بالا ببره.درست ازش استفاده کن. am_merman0104-03-2009, 01:13 AMسلام خدمت دوستان عزیز دوست عزیز از اینکه اسم شما رو اشتباه تایپ کردم عذرخواهی میکنم. البته تقصیر من نیست عیب فینگیلیش نوشتن همینه دیگه . به هر حال من پستم رو ادیت کردم . باز هم از شما پوزش می طلبم . MTPROG15-03-2009, 11:33 AMبهترین روش برای اینکار اینه که از پروگرس بارهای انتظار (Wait ProgressBar) استفاده کنی که تا اتمام کار مدام به عقب و جلو میره اگه میتونی خودت یه کنترول از این نوع برای همیشه برای خودت طراحی کن در غیر اینصورت میتونی از کامپونینیت های اماده استفاده کنی *** یه روش ساده تر میتونی از یه تصویر GIF که به شکل یک پروگرس بار انتظاری هستش اسفاده کنی و اونو تو یه PictureBox نمایش بدی سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 431]