-
ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
من میخواهم در زمان لود اطلاعات در گرید به وسیله یک ProgressBar عملیات بار گزاری اطلاعات را نمایش دهم تا کاربر منتظر بایند گرید شود و از هنگ کردن نرم افزار جلوگیری شود ... یا اینکه متن "اطلاعات در حال بار گذاری است" در زمان بایند نمایش داده شود.
لطفا راهنمایی بفرمایید ؟
سورس کد ، سمپل ، پیشنهاد ، لینک و ...
================================================== =====
این تاپیک به جواب رسید نمونه های زیادی برای بک ProgressBar دوستان گذاشتند ...
در حال حاضر در مورد BackGroundWorker بحث می شود ...
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
من متد خاصی برای این کار بلد نیستم ولی به نظر من می تونی یک لیبل ایجاد کنی و قبل از هر متدی که می خواهی لود شدنش رو اعلام کنی ، متن لیبل رو متناسب با او تغییر بدی...
در ضمن این فقط یه ایده است برای تازه کار ها
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
2ndsigner
من متد خاصی برای این کار بلد نیستم ولی به نظر من می تونی یک لیبل ایجاد کنی و قبل از هر متدی که می خواهی لود شدنش رو اعلام کنی ، متن لیبل رو متناسب با او تغییر بدی...
در ضمن این فقط یه ایده است برای تازه کار ها
با تشکر از توجهت ولی این کار عملی نیست برنامه میره به دیتابیس کانکت میشه و اطلاعات رو سلکت میزنه بعد میاد رکوردها رو فیلتر میکنه و رنگهای مختلفی بهشون میده تو این فاصله برنامه هنگ میکنه میخوام تو این فاصله که ایونت های متعددی رخ میده به جای هنگ یک ProgressBar نشون داده بشه.
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
مي توني يه فرم درست كني و قبل از بايند شدن اونو شو ديالوگ كني و وقتي بايند تموم شد اونو كلوز كني !
تا توش ميتوني بنويسي كه لطفا چند لحضه صبر كنيد
موفق باشي
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
ostovarit
من میخواهم در زمان لود اطلاعات در گرید به وسیله یک ProgressBar عملیات بار گزاری اطلاعات را نمایش دهم تا کاربر منتظر بایند گرید شود و از هنگ کردن نرم افزار جلوگیری شود ... یا اینکه متن "اطلاعات در حال بار گذاری است" در زمان بایند نمایش داده شود.
لطفا راهنمایی بفرمایید ؟
سورس کد ، سمپل ، پیشنهاد ، لینک و ...
با backgroundworker راحت میتونی انجام بدی،خودم واسه عملیات ریستور نوشتم و خیلی خوب کارمیکنه..
1 - ابتدا یه فرم جدید ایجاد میکنی و یه progressbar و .. میزاری توش، همه کارایی که باید انجام بشه رو تو رویداد لود فرم بنویس . درضمن باید topmost هم باشه
2 - یه backgroundworker میکشی تو فرمی که گرید داری و تو پروپرتی اون خاصیت cancel رو true میکنی ، در رویداد do-work اون، فرمی که بالا ایجاد کردی رو show میکنی(showdialog نه)، حالا در برنامه قبل اینکه گرید لود بشه مینویسی :
backgroundWorker1.RunWorkerAsync();
this.Cursor = Cursors.WaitCursor;
در انتها که گرید پر شد مینویسی :
backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;
تمام..
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
با سلام
صحبت های حجتی نیا درسته منم پیشنهاد میکنم بری تو قسمت نمونه کد ها صفحه یکی مونده به اخری یک نمونه کار هستش از اون طریق میتونی استفاده بکنی
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
mmd2009
با سلام
صحبت های حجتی نیا درسته منم پیشنهاد میکنم بری تو قسمت نمونه کد ها صفحه یکی مونده به اخری یک نمونه کار هستش از اون طریق میتونی استفاده بکنی
سلام دوست عزیز من برنامه که گفتیدو نتونستم پیدا کنم ممکنه لینکشو برام بزارید؟
خیلی ممنونم
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
-
1 ضمیمه
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
با backgroundworker راحت میتونی انجام بدی،خودم واسه عملیات ریستور نوشتم و خیلی خوب کارمیکنه..
1 - ابتدا یه فرم جدید ایجاد میکنی و یه progressbar و .. میزاری توش، همه کارایی که باید انجام بشه رو تو رویداد لود فرم بنویس . درضمن باید topmost هم باشه
2 - یه backgroundworker میکشی تو فرمی که گرید داری و تو پروپرتی اون خاصیت cancel رو true میکنی ، در رویداد do-work اون، فرمی که بالا ایجاد کردی رو show میکنی(showdialog نه)، حالا در برنامه قبل اینکه گرید لود بشه مینویسی :
کد:
backgroundWorker1.RunWorkerAsync();
this.Cursor = Cursors.WaitCursor;
در انتها که گرید پر شد مینویسی :
کد:
backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;
تمام..
سلام
من کارهایی که شما را انجام دادم اما برنامه مشکل داره،برنامه را ضمیمه کردم اگه ممکنه یک نگاهی بهش باندازید ببنید مشکل از چیست؟
-
1 ضمیمه
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
hamide_kh
سلام
من کارهایی که شما را انجام دادم اما برنامه مشکل داره،برنامه را ضمیمه کردم اگه ممکنه یک نگاهی بهش باندازید ببنید مشکل از چیست؟
یه برنامه واست گذاشتم نیازی به background.. نداره و فقط با fmessagebox کار میکنه ..
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
حجتی نیا
یه برنامه واست گذاشتم نیازی به background.. نداره و فقط با fmessagebox کار میکنه ..
سلام
این چیزی که الان گذاشتید بر حسب زمانی که ما خودمون براش تعیین میکنیم پیغام رو روی صفحه نمایش میده نه بر اساس مدت زمانی که برنامه در حال اجرای عملیات هست
روش قبل بهتر بود
من روش قبل رو امتحان کردم ولی موقعی که کار تمام میشه با اینکه backgroundWorker1.RunWorkerAsync();
کردم ولی هم چنان پیغام باقی میمونه!!!!!!!!!!
چرا؟؟؟
البته من WPF کار کردم ، ممکن از اون باشه؟؟
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
اینو ببین شاید به دردت بخوره
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
سلام
این چیزی که الان گذاشتید بر حسب زمانی که ما خودمون براش تعیین میکنیم پیغام رو روی صفحه نمایش میده نه بر اساس مدت زمانی که برنامه در حال اجرای عملیات هست
روش قبل بهتر بود
من روش قبل رو امتحان کردم ولی موقعی که کار تمام میشه با اینکه
backgroundWorker1.RunWorkerAsync();
کردم ولی هم چنان پیغام باقی میمونه!!!!!!!!!!
چرا؟؟؟
منم دقیقا همین مشکل را دارم میشه همون برنامه را اصلاحش کنید
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
CancelAsync: توقف اجرای دستورات.
درخواستی را مبنی بر قطع شدن عملیات ثبت می کند. با فراخوانی این تابع مقدار CancellationPending به true تغییر پیدا خواهد کرد.
توجه کنید که با فراخوانی این تابع اجرای دستورات همان لحظه متوقف نخواهد شد. این وظیفه نویسنده کد خواهد بود که مقدار ویژگی CancellationPending را بررسی کرده و ادامه عملیات را قطع کند.
هشدار: همیشه مقدار CancellationPending را در درون رویداد DoWork بررسی کنید. در صورت عدم بررسی این ویژگی ، اجرای تابع CancelAsync تاثیری نخواهد داشت و اجرای دستورات قطع نخواهد شد.
نکته: برای استفاده از این تابع باید مقدار ویژگی WorkerSupportsCancellation را به trueتغییر دهید، در غیر اینصورت با خطای InvalidOperationException روبرو خواهید شد.
برگرفته از مقاله آقای سالار خلیل زاده در سایت www.softprojects.org
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
من یه سئوال توی بخش WPF پرسیدم در همین رابطه اگه کسی دوست داره کمک کنه یه نگاهی بهش بندازه
http://www.barnamenevis.org/sh...d.php?t=238818
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
اینو ببین شاید به دردت بخوره
سلام من این لینک را دیدم اما نتونستم مشکلم را حل کنم
جناب حجتی نیا یا دوستان دیگه میشه اون برنامه ای که در پست 9 گذاشتم را یک نگاه بندازیذ
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
دوست عزیز برداشت بنده از background Worker این هستش که ما یه کاری که مدت طولانی ای انجام خواهد شد و ما میتوانیم میزان پیشرفت کار را در هر لحظه گزارش بدهیم همراه با یک progressbar استفاده کنیم. (البته نمیگم که برداشت من کاملا درسته) در اینجا شما نیاز دارید در طی انجام عملیات لود اطلاعات یک فرم wating نمایش داده شود. روشی که من استفاده میکنم اینه که یه فرم wating طراحی میکنم و داخلش یک فایل فلش یا gif قرار میدهم. حالا قبل از اجرای دستورات ado.net با استفاده از یک thread فرم wating رو نمایش میدم. و در پایان لود اطلاعات اون فرم رو می بندم
موفق باشید
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
با عرض سلام
ولی بهترین روش همین backgroundworker هستش من خیلی جستجو کردم ولی به نتیجه نرسیدم نمونه کدهای زیادی بودن ولی همشون به نحوی خطا داشتن.
اگه دوستان در این ضمینه نمونه کد یا مثالی داشتن ممنون میشم اگه در اختیار ما هم قرار بدن.
با تشکر...
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
-
1 ضمیمه
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
همون طوری که گفتم بهترین راه استفاده ازBackground Worker هستش من یک برنامه براتون آماده کردم که تقریبا کامل هستش هم بصورت همزمان کار می کنه هم بصورت غیر همزمان هر جایی هم مشکلی بود بگین توضیح بدم.
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
mmd2009
در این نمونه یک ماسک ساخته شده و در زمان انجام عملیات روی فرم انداخته میشه ( طبق تصاویر) ولی همچنان سیستم تا پایان عملیات هنگ میکنه ... من میخواستم از بک گراند ورکر استفاده کنم که با ارور زیر مواجه شدم :
Cross-thread operation not valid: Control 'Pnl_Container' accessed from a thread other than the thread it was created on.
کدی که در ایونت do Work نوشتم اینه:
ShowMask("Sending ...");
ِ//do somthing
HideMask();
backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;
وقتی به متد ShowMask میره ارور نمایش داده میشه!
آیا در این ایونت امکان اجرای متدی نیست؟ من کد متد ماسک رو داخل خود ایونت هم نوشتم باز ارور داد!
مفهوم ارور بالا چیه و راه حلش؟
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
وقتی به متد ShowMask میره ارور نمایش داده میشه!
آیا در این ایونت امکان اجرای متدی نیست؟ من کد متد ماسک رو داخل خود ایونت هم نوشتم باز ارور داد!
مفهوم ارور بالا چیه و راه حلش؟
وقتی با ترد ها کار می کنید(backgroundWorker در پشت صحنه با ترد ها کار میکنه) نمی تونید منابعی رو که در اختیار سایر ترد هاست تغییر بدهید اینجا احتمالا شما یه تغییر روی کنترل 'Pnl_Container' که در اختیار UI هست و در کنترل ترد مربوط به backgroundWorker1 نیست در وسط کارهایی که در ترد backgroundWorker انجام میشه ، انجام دادید.
راه حل اینه که خاصیت WorkerReportsProgress را true کنید و بعد از رویداد ProgressChanged استفاده کنید.
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
projeha
وقتی با ترد ها کار می کنید(backgroundWorker در پشت صحنه با ترد ها کار میکنه) نمی تونید منابعی رو که در اختیار سایر ترد هاست تغییر بدهید اینجا احتمالا شما یه تغییر روی کنترل 'Pnl_Container' که در اختیار UI هست و در کنترل ترد مربوط به backgroundWorker1 نیست در وسط کارهایی که در ترد backgroundWorker انجام میشه ، انجام دادید.
راه حل اینه که خاصیت WorkerReportsProgress را true کنید و بعد از رویداد ProgressChanged استفاده کنید.
عمل میکنه ولی سیستم هنگه!
نمونه ای میشه لطف کنید که من متوجه شم چکار باید انجام داد؟
با تشکر
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
برای حل مشکلم اومدم تمام کد هایی که مربوط به متد هایی خارج از ایونت DoWork بود رو اوردم داخل ایونت و مقادیر رو در یک استرینگ ریختم و از متغییر ها در کد داخل ایونت استفاده کردم که نیازی به صدا زدن متدی خارج از بلاک ایونت نباشد ...
مشکلم حل شد ولی این روش درسته؟!
-
1 ضمیمه
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
فکر می کنم که یه سربار اضافی به وجود آوردید ، فکر کنید که اگر بخوهید اونو تغییر بدین یا ارتقاش بدین بازم جواب بده مثلا فکر کنید که می خواهید درصد پیشرفت عملیات رو توی PeogressBar نمایش بدین(ظاهرا می خواین که فقط یه نوشته هنگام پروسه سنگینتون نمایش داده بشه).
این جا هست که باید از ReportProgress استفاده کنید.
نمی دونم مشکل جناب خانی حل شده یا نه من سریع برنامه ای که برای دیباگ در پست شماره 9 همین تاپیک گذاشته بودن رو بررسی و تصحیح کردم، دوستان ببینید و نظر بدین.توی این کد از رویداد RunWorkerCompleted استفاده کردم
ان شا الله یه نمونه کاملتر رو می ذارم.
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
projeha
فکر می کنم که یه سربار اضافی به وجود آوردید ، فکر کنید که اگر بخوهید اونو تغییر بدین یا ارتقاش بدین بازم جواب بده مثلا فکر کنید که می خواهید درصد پیشرفت عملیات رو توی PeogressBar نمایش بدین(ظاهرا می خواین که فقط یه نوشته هنگام پروسه سنگینتون نمایش داده بشه).
این جا هست که باید از ReportProgress استفاده کنید.
نمی دونم مشکل جناب خانی حل شده یا نه من سریع برنامه ای که برای دیباگ در پست شماره 9 همین تاپیک گذاشته بودن رو بررسی و تصحیح کردم، دوستان ببینید و نظر بدین.توی این کد از رویداد RunWorkerCompleted استفاده کردم
ان شا الله یه نمونه کاملتر رو می ذارم.
با سلام مجدد و تشکر از راهنمایی های خوبی که تا الان کردید...
من برای رفع ارور زیر :
Cross-thread operation not valid: Control 'Pnl_Container' accessed from a thread other than the thread it was created on.
در فرم لود خط زیر رو اضافه کردم که در نتیجه کد درست انجام میشه و اروری نمیده :
Control.CheckForIllegalCrossThreadCalls = false;
این کد چکار میکنه ؟ آیا این روش اصولی هست ؟
وقتی در زمانم کار بک گراند ورکر فرم رو میبندیم نیازی هست که در ایونت close فرم عملیات در حال انجام رو cancel کنیم یا اتوماتیک کنسل میشود ؟ ( فرم رو بستیم اما برنامه هنوز باز است)
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
در فرم لود خط زیر رو اضافه کردم که در نتیجه کد درست انجام میشه و اروری نمیده :
کد:
Control.CheckForIllegalCrossThreadCalls = false;
این کد چکار میکنه ؟ آیا این روش اصولی هست ؟
با سلام
در مورد CheckForIllegalCrossThreadCalls من هنوز با اون کار نکردم اما پیزی که از Summary خود VS پیداست ظاهرا این false کردن این پروپرتی باعث میشه خطاهایی که در مورد thread های ناصحیح (wrong thread) ، call نشه.
این کد رو کجا دیدید؟ اعتبار سایت و نویسنده و موردی که این کد توصیه شده رو در نظر بگیرید...
نقل قول:
وقتی در زمانم کار بک گراند ورکر فرم رو میبندیم نیازی هست که در ایونت close فرم عملیات در حال انجام رو cancel کنیم یا اتوماتیک کنسل میشود ؟ ( فرم رو بستیم اما برنامه هنوز باز است)
در مورد cancel کردن یا نکردن تصور کنید که thread مربوط به BackgroundWorker در حال اجراست، فرم رو می بندید (برنامه در حال اجراست)ظاهرا هم خطایی نیست ، اما اگه بلا فاصله دکمه close برای فرم اصلی زده شد و برنامه پایان یافت چی؟باز هم wrong thread.
دقت کنید که برای RunWorkerCompleted 3 حالت وجود دارد:
1- کار مورد نظر(متد DoWork) به طور کامل انجام شود.
2- عملیات calcel شود.
3- خطایی رخ دهد.
به نظر منcancel کنید.
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
نقل قول:
نوشته شده توسط
projeha
با سلام
در مورد CheckForIllegalCrossThreadCalls من هنوز با اون کار نکردم اما پیزی که از Summary خود VS پیداست ظاهرا این false کردن این پروپرتی باعث میشه خطاهایی که در مورد thread های ناصحیح (wrong thread) ، call نشه.
این کد رو کجا دیدید؟ اعتبار سایت و نویسنده و موردی که این کد توصیه شده رو در نظر بگیرید...
با سلام و تشکر از راهنمایی که فرمودید ...
در مورد CheckForIllegalCrossThreadCalls من یک بریک پونت گذاشتم و انجام کارا رو دنبال کردم حرف شما صحیح هست exception وجود داره ولی نشون داده نمیشه ... و با کمال تعجب نرم افزار کارش رو به خوبی و درست انجام میده !
الان مشکلی نیست ولی من میترسم که نکته ای باشه که ندیده باشم ...
دوستان دیگر چیزی در مورد این Property میدونن بگن ما هم روشن بشیم ...
با تشکر
-
نقل قول: ProgressBar : در زمان لود اطلاعات در گرید "اطلاعات در حال بار گذاری است" نمایش داده شود
چرا انقدر جواب رو م پیچونید جواب خیلی ساده است.
progressbar1.maximum=dategridview1.rows.count
progressbar1.value=dategridview1.countrow