مشکل usercontrol در موقع Dispose شدن

golinazhad_h

کاربر فعال
سلام
من یک usercontrol در سی شارپ ساختم و یک imagebox هم بهش اضافه کردم در موقع instance کردن از این کنترل دوتا bitmap و یک thread هم میسازم و نهایتا thread را اجرا میکنم وظیفه این thread ساخت انیمیشن با تصویر است
اگر چند تا از این usercontrol بسازم و از روی فرم remove نکنم و thread داخل usercontrol برای همیشه کار کند هیچ مشکلی ندارد
ولی اگر چند تا از این usercontrol بسازم thread داخلش را اجرا کنم و بعد ار اتمامش توسط فرم اصلی این usercontrol ها را اروی فرم dispose کنم بعد دوباره ایجاد کنم و اجرا کنم(عمل ایجاد و dispode مدام تکرار شود ) تعداد هندلهخای ایجاد شده در ویندوز مرتبا زیاد میشود و برنامه هنگ میکند
ضمنا وقتی usercontrol را dispose میکنم همه کنترلهای داخلش و حتی thread را هم نیز dispose میکنم و در انتهای متد dispose باز base.dispose() را هم فراخوانی میکنم gorbrage collector را هم فراخوانی میکنم
به نظر دوستان مشکل چی میتونه باشه؟
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
سلام
من یک usercontrol در سی شارپ ساختم و یک imagebox هم بهش اضافه کردم در موقع instance کردن از این کنترل دوتا bitmap و یک thread هم میسازم و نهایتا thread را اجرا میکنم وظیفه این thread ساخت انیمیشن با تصویر است
اگر چند تا از این usercontrol بسازم و از روی فرم remove نکنم و thread داخل usercontrol برای همیشه کار کند هیچ مشکلی ندارد
ولی اگر چند تا از این usercontrol بسازم thread داخلش را اجرا کنم و بعد ار اتمامش توسط فرم اصلی این usercontrol ها را اروی فرم dispose کنم بعد دوباره ایجاد کنم و اجرا کنم(عمل ایجاد و dispode مدام تکرار شود ) تعداد هندلهخای ایجاد شده در ویندوز مرتبا زیاد میشود و برنامه هنگ میکند
ضمنا وقتی usercontrol را dispose میکنم همه کنترلهای داخلش و حتی thread را هم نیز dispose میکنم و در انتهای متد dispose باز base.dispose() را هم فراخوانی میکنم gorbrage collector را هم فراخوانی میکنم
به نظر دوستان مشکل چی میتونه باشه؟

راستش من هنوز درست متوجه نشدم شما مشکلتون چیه؟! اگر کنترل را از بین ببرید طبیعتاً ترد از بین میره. چون نمیدونم موضوع کاریتون چیه خیلی نمیتونم به حرفم مطمئن باشم اما اگر کنترل را از ترد جدا کنید شاید نتیجه بهتری دهد.
در خصوص GC هم زبق یک تجربه عملی و یه سری سرچ که زمانی انجام دادم، متوجه شدم که تا زمانی که اپلیکیشن اجرا می شود بطور کامل عمل نمی کند و حافظه ای آزاد نمی شود :gol:
 

golinazhad_h

کاربر فعال
نه تا thread را خودت abort نکنی از بینه نیمره اگر در داخل loop باشه
ضمنا thred هم باید داخل usercontrol باشه نمیشه جدا کرد
 

Similar threads

بالا