باید توی پروسه ای که در حال اجرا هست چک کنی که آیا bakground.CancellationPending مقدارش true شده یا نه.
چون بعد از اجرای CancelWork() این مقدار true می شود و ما باید پروسه مان را به پایان برسانیم. مخصوصاً اگر پروسمون یک حلقۀ بینهایت داشته باشه. وگرنه تا آخر اجرا میشه و هیچ راهی برای متوقف کردنش نیست.
در ضمن یه چیز جالب هم در این باره تغییر مشخصات فرم (یا در کل داده های یک ریسمان دیگر) هست. چون این دو در دو ریسمان متفاوت هستند این کار به صورت مستقیم امکان پذیر نیست. مثلاً برای تغییر اندازۀ فرم (Size) اگر به صورت مستقیم در پروسه عمل کنیم یک Exception رخ می دهد.
برای مثال من خودم می بایست در این متد ScrollSize یک فرم رو تغییر می دادم. ولی اگه مستقیم می نوشتم که مثل
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یک exception رخ می داد.
برای حل این مشکل باید این کارو می کردم:
ابتدا یک delegate ایجاد کنم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد توی فرمم یک عضو از این نوع ساختم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد اونو تو سازنده مقداردهی کردن:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و تابعی با این نام در فرم ایجاد کردم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حال هر وقت نیاز به تغییر دادن ScrollSize فرم در پروسه بود اینگونه عمل می کردیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آخیش تموم شد!