0 امتیاز
سلام خدمت اساتید عزیز

من میخوام در پروژه ای که درست میکنم از یک پایگاه داده ای استفاده کنم . مشکل من روی backgroundworker  هست.

بطور مثال وقتی میخوام Login کنم : میخوام نام کاربری و کلمه عبور از دیتابیس خونده بشه و مدت زمانی که برای این موضوع پیش میاد از طریق یک Progressbar یا یک label لطفا منتظر بمانید ،کنترل کنم . یا وقتی پنجره ای که حاوی اطلاعات دیتاگریدویوو دیتابیس هست میخواد باز بشه توسط backgroundworker کنترل کنم و پنجره ای نمایش بدم تحت عنوان لطفا منتظر بمانید و وقتی که اطلاعات بطورکامل لوود شد اونا رو نشون بده .

 

با تشکر از همگی

1 پاسخ

+1 امتیاز

سلام دوست عزیز

من یه پروژه براتون نوشتم البته پارسال نوشته بودم تغییراتی دادم

اصولا برای نمایش دیتابیس تو دیتاگرید اگه از بک گروند ورکر هم استفاده کنن سمت کاربر زیاد کارایی نداره 

چرا؟

وقتی پروژه بزرگ شد فرض کن 1 میلیون رکورد رو میخایی لود کنی چقدر طول میکشه؟

بهتر اینه صفحه بندی بشه صفحه اول مثلا 20 تا رکور داشته باشه با ترد کنترل بشه و حین ثبت نیازی به لود مجدد دیتاگرید هم نیست

برای لاگین اونم همینطور سمت کاربر مدت چند دهم ثانیه طول میکشه اما من با ورکر و حلقه یه تایم نمایش ساختم امیدوارم بدردت بخوره

user---123 هم یوزر پس هست

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=668407203919598725

با سلام . ممنون از پاسخی که دادین . ولی در پروژه ای که نوشتین بعد از backgroundWorker1_DoWork که کارش تموم شد و Progressbar  تا 100 رفت اونوقت میاد میگه کار تموم شد و دستورات داخل backgroundWorker1_RunWorkerCompleted اجرا میکنه . در صورتی که این کارو میشه با یه حلقه for و زمانی که روی کلید ورود کلیک کردیم اجرا بشه . من میخوام توسط backgroundWorker اینو کنترل کنم تا برنامه گیر نکنه و پس زمینه کار انجام بشه و کنترلش کنم .

یعنی وقتی میخوام مراحل تطبیق دادن کلمه عبور با دیتابیس اتفاق میفته رو که مرحله به مرحله پیش میره تو progressbar نشون بدم  . در حقیقت مراحل استفاده از backgroundWorker اینطوری باید بنظرم باشه :

  کارها رو پس زمینه بیاد اجرا بگیره و پیشرفت خودشو داخل progressbar نشون بده= backgroundWorker1_DoWork

backgroundWorker1_RunWorkerCompleted= اینجا هم وقتی کار تموم میشه یه پیغام نشون میدیم که کار تموم شده .

backgroundWorker1_ProgressChanged = اینم که برای تغییر مقدار Progressbar هست .

 

بازم ممنونم از توجهتون.
توسط (117 امتیاز) 5

خب میتونید از این روش استفاده کنید

این کدرو داخل بک گراند وردر بزارید

  this.Invoke(new Action(() =>
            {
            
            LoginSet();
             

            }));

 ویا 
 reed = cmd.ExecuteReader();
مقدار رو با ورکر کنترل کنید و داخل یه متغییر بریزید و اون متقییر  مقدار داخل همون حلقه باشه

 

 

 

 

 

البته بهتره بدونید من تو شرکت برنامه هایی در سطح کشوری رو دیدم و سورسش رو هم دارم تو لاگین از هیچ یک از این روشها استفاده نکردن هر چند هر برنامه نویس ایده خودشو پیاده میکنه اما این کار بیشتر در وب سایتها بکر میاد تا احتمال اینکه ارتباط با دیتابیس قطع باشه و یا اینترنت قطه باشه و ... کنترل کنن

تو لوکال احتمالات کمتر از وب هست

توسط (7,164 امتیاز) 4 7 141
ممنون از راهنماییتون . من از  backgroundWorker میخوام هرجایی که پردازشی انجام بشه استفاده کنم . چون همه ی سیستم ها که با یک نوع سخت افزار نیستن . ممکنه یه سری ضعیف تر باشن و مدت زمان بیشتری طول بکشه . بخاطر همین میخوام هرجایی از برنامه که میخواد پردازشی انجام بشه این حالت رو براش تعریف کنم تا اگه زمان بیشتری در هر سیستمی برد کنترل شده باشه .

در برنامه ای که دارم می سازم قسمتی هم باید اطلاعات رو از دیتابیس به دیتاگرید ویوو بیاره و نمایش بده . با backgroundWorker میتونم از هنگ کردن برنامه جلوگیری کنم .

بازم بابت پاسخگویی شما ممنونم .

اگه زحمتی نباشه ممنون میشم یه مثال واضح تری برام بزنین . من با این موضوع تا حالا کار نکردم و نمیدونم چطوری باید استفاده کنم .

اگه میشه تو یه پروژه برام نمایشش بدین

تشکر از محبتتون
توسط (117 امتیاز) 5

در صورت ضعیف بودن سیستم حتی بهترین روش بنظر من استفاده از async هست که مشکلی داره اونم توابع این کلاس اکثرا از دات نت 4.5 به بالا پشتیبانی میکنن

بعد میتونید از ترد استفاده کنید هر چقدر سیستم ضعیف باشه مثلا کش سی پی یو 1 باشه و رم 1 حین لاگین ترد میتونه کنترل لازم رو رو فرم داشته باشه 

بهرحال 3 تا مثال براتون ارسال میکنم

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=901569823732128549

 

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=17523363255729805841

 

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=3441776896735165395

توسط (7,164 امتیاز) 4 7 141

ممنون از راهنماییت دوست عزیز .

اگه موفق نشدم دوباره باید راهنماییم کنین . رو این کد ها و یه سری کد ها خودم دارم کار میکنم ، انشالله که نتیجه بگیرم .

 

در صورت موفق شدن این موضوع کد ها رو اینجا میذارم بقیه هم استفاده کنند.

با تشکر از همکاری شما دوست عزیز . heartheart

توسط (117 امتیاز) 5
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,923 کاربر

دسته بندی ها

...