PDA

View Full Version : جرا Dispose برای BackGroundWorker کار نمیکنه؟؟؟



bade saba
پنج شنبه 27 آبان 1389, 12:20 عصر
سلام خدمت دوستان برنامه نویس

من یه backWorker دارم که در طی برنامه run میشه اما وقتی دستور dispose براش مینویسم همچنان به کارش ادامه میده. کسی میدونه چجوری میشه متوقفش کرد؟؟؟

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

mehdi.mousavi
پنج شنبه 27 آبان 1389, 13:28 عصر
سلام.
لطفا به این پست (http://barnamenevis.org/forum/showpost.php?p=880050&postcount=9) مراجعه کنید تا با روش صحیح کار کردن با BackgroundWorker آشنا بشید.
سپس اگر سوالی بود بفرمایید تا راهنمایی کنم.

موفق باشید.

kamran00f
پنج شنبه 27 آبان 1389, 14:21 عصر
سلام خدمت دوستان برنامه نویس

من یه backWorker دارم که در طی برنامه run میشه اما وقتی دستور dispose براش مینویسم همچنان به کارش ادامه میده. کسی میدونه چجوری میشه متوقفش کرد؟؟؟

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

کدی که گذاشیتو خوندم. راهی به نظرم نرسید. جز اینکه داخل کلاس form1 یه متغیر بولین به اسم cancel بذاری و با کلیک کردن رو باتن کنسل مقدارشو true کنی و هر جای کدت که زمان بره و تکرار میشه اونو چک کنی که اگه true بود از اون تابع return کنی!

علیرضا حسن زاده
پنج شنبه 27 آبان 1389, 17:14 عصر
با خصوصیت Cancelpending خود BackGround هم میشه همین کار رو کرد

FastCode
پنج شنبه 27 آبان 1389, 17:31 عصر
کدی که گذاشیتو خوندم. راهی به نظرم نرسید. جز اینکه داخل کلاس form1 یه متغیر بولین به اسم cancel بذاری و با کلیک کردن رو باتن کنسل مقدارشو true کنی و هر جای کدت که زمان بره و تکرار میشه اونو چک کنی که اگه true بود از اون تابع return کنی!
من کد رو نخوندم ولی فکر میکنم باید volatile باشه.

bade saba
پنج شنبه 27 آبان 1389, 18:19 عصر
سلام.
لطفا به این پست (http://barnamenevis.org/forum/showpost.php?p=880050&postcount=9) مراجعه کنید تا با روش صحیح کار کردن با BackgroundWorker آشنا بشید.
سپس اگر سوالی بود بفرمایید تا راهنمایی کنم.

موفق باشید.


من پست مربوطه رو خوندم اما اگر سوال من رو نگاه بکنید گفتم که امکان استفاده از یک دستور break نیست که به راحتی مشک حل بشه مثلا در بخشی از برنامه قرار پیجی از وب گرفته بشه که اگر من از cancel خود BackgroundWorker استفاده کنم باید تا پایان لود شدن اون پیج صبر کنم (این در بهترین حال هست که در این وضعیت باید در چندین نفطه برنامه این متغییر رو چک کنم و خاتمه برنامه رو مدیریت کنم) در صورتی که من میخوام در لحظه تصمیم گیری برای توقف کار ، روند متوقف بشه

bade saba
پنج شنبه 27 آبان 1389, 18:21 عصر
من کد رو نخوندم ولی فکر میکنم باید volatile باشه.

لطفا بیشتر توضیح بدید چیزی از جواب شما متوجه نشدم

ممنون

FastCode
پنج شنبه 27 آبان 1389, 21:30 عصر
لطفا بیشتر توضیح بدید چیزی از جواب شما متوجه نشدم

ممنون

فکر میکنم باید توی امضام بنویسم "لطفاً کلمات انگلیسی رو گوگل کنید."

آخه من چطوری volatile رو به شما توضیح بدم؟

علیرضا حسن زاده
جمعه 28 آبان 1389, 13:56 عصر
ااگه بخوای فوری عملیات رو متوقف نی بهتره از یه thread استفاده کنی و با فشره شدن دکمه Cancel اون Thread رو Abort کنی پیاده سازیش برای این حالت ساده تر هست

hi level hdd
جمعه 28 آبان 1389, 20:47 عصر
فکر کنم بتونی متغییرتو با مقدار null ست کنی البته من با backworker کار نکردم
ولی در thread میشه

dr_jacky_2005
شنبه 29 آبان 1389, 09:14 صبح
سلام خدمت دوستان برنامه نویس

من یه backWorker دارم که در طی برنامه run میشه اما وقتی دستور dispose براش مینویسم همچنان به کارش ادامه میده. کسی میدونه چجوری میشه متوقفش کرد؟؟؟

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

توو دکمۀ استارت:


objThread = new Thread(YourFunction);
objThread.Start();


توو دگمۀ استاپ:


objThread.Abort();

bade saba
شنبه 29 آبان 1389, 09:52 صبح
ممنون از تمام دوستان به خاطر جوابهایی که دادن اما بد نیست این رو بگم که من کار با thread هارو بلدم اما هدف انجام این کار با backgroundWorker هستش من چون دوست دارم توانایی این رو داشته باشم که یه کار رو با کلاس ها و ابزار متفاوت انجام بدم رفتم سراغ backGroundWorker.

با تشکر مجدد از تمام دوستانی که جواب دادن لطفا سوال تاپیک رو پاسخ بدید. چرا بعد از انجام خط
backgroundWorker.Dispose(); شمارش همچنان ادامه پیدا میکنه

dr_jacky_2005
شنبه 29 آبان 1389, 12:02 عصر
سلام خدمت دوستان برنامه نویس

من یه backWorker دارم که در طی برنامه run میشه اما وقتی دستور dispose براش مینویسم همچنان به کارش ادامه میده. کسی میدونه چجوری میشه متوقفش کرد؟؟؟

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

یک مثال فوق العاده از ماکروسافت