نمایش نتایج 1 تا 28 از 28

نام تاپیک: رها کردن کامل منابع بعد از بستن فرم

  1. #1

    رها کردن کامل منابع بعد از بستن فرم

    من توی چند تا فرم دارم
    یه قسمت از برنامه فرم دوم رو این طوری نشون میدم
    frmd_members_ned frm = new frmd_members_ned();
    frm.ShowDialog();

    این طوری هم همون فرم دوم رو میبدنم
    this.Close();

    ولی وقتی دوباره همین فرم دوم رو باز میکنم به دلیل اینکه منابع قبلی ازاد نشدن پیغام خطا میده و خارج میشه
    ترجمه پیغامش هم اینه که این منابع توسط پروسه دیگه ای در حال استفاده هستن
    ولی از این دستور که استفاده میکنم منابع کامل آزاد میشه
     Application.Restart();

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

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1390
    محل زندگی
    Visual Studio 2013
    پست
    218

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    سلام
    فکر کنم این مشکلت حل بشه:
    this.Dispose();

    این فرمت رو نابود میکنه!

    موفق باشی

  3. #3

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    سلام از این دو تیکه کد استفاده کنید...

    Application.ExitThread();


    برای آزاد کردن منابع شی خاص...

                this.Dispose();
    conecction.Dispose();

  4. #4

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط morteza5358 مشاهده تاپیک
    سلام
    فکر کنم این مشکلت حل بشه:
    this.Dispose();

    این فرمت رو نابود میکنه!

    موفق باشی
    اینم امتحان کردم مثل this.close(); عمل میکنه

    نقل قول نوشته شده توسط samadblaj مشاهده تاپیک
    سلام از این دو تیکه کد استفاده کنید...

    Application.ExitThread();


    برای آزاد کردن منابع شی خاص...

                this.Dispose();
    conecction.Dispose();
    اینا الان سه تیکه شدن یعنی سه دستور
    شی خاص هم که درگیر منابع هست picturebox هست
    الان چه طوری استفاده کنم؟

  5. #5

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    سلام
    picturebox.dispose();

  6. #6

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط AMIN_SG مشاهده تاپیک
    سلام
    picturebox.dispose();
    اینم جواب نمیده
    خیلی ور رفتم باهاش

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1390
    محل زندگی
    Visual Studio 2013
    پست
    218

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    سورس رو بزار.....

  8. #8

    نقل قول: رها کردن کامل منابع بعد از بستن فرم


    using (frmd_members_ned frm = new frmd_members_ned())
    {
    frm.ShowDialog();
    }
    GC.Collect();


    مطمئن شوید که اگر در جایی بجز این فرم frmd_members_ned متغیری دارید که با یک عضو از این frmd_members_ned
    در ارتباطه، بعد از ShowDialog حتما اون متغیر رو برابر null کنید تا هیچ شیء ای بخاطر اون متغیر باقی نمونه.

  9. #9
    کاربر دائمی آواتار ordebehesht
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    یه گوشه دنج از این دنیا
    پست
    845

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    از application.colse() استفاده کردی
    appliction.exite() هم بدر میخوره

    در ضمن چرا میخوای منابع رو آزاد کنی خود C#‎ اینکار رو به طور اتوماتیک کمیکنه

  10. #10
    کاربر دائمی آواتار RED-C0DE
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    31 4E 20 20 54 48 33 20 20 28 72 59 70 54 30 47 33 4E 31 28 20 20 5C 2F 30 52 31 7C 7C 29 20 20 7C 2
    پست
    551

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    شما کنترلی روی آزاد کردن لحظه ایه منابع Managed ندارین فقط ممکنه روند آزادسازی رو تسریع ببخشین.
    خود موتور داخلی .net در زمان مناسب اینکارو انجام می ده.

    همونطور هم ک گفتن نیازی هم واسه این کارا روی منابعی ک خود .net روی اونها و مصرف حافظشون نظارت و مدیریت داره نیست..
    این آبجکتهای ب اصطلاح Managed ، هنگامی ک دیگه ریفرنس زنده ای بهشون نباشه یا از Scope حیات خودشون خارج بشن، GC با الگوریتمهای هوشمندی طی زمانهایی ک خودش تشخیص می ده ب بهترین شکل حافظه اشغال شده توسط اونها رو مدیریت می کنه تا برنامه نویس درگیر این کارهای سیستمی و کلیشه ای نشه (البته مسلما هرچی بیشتر بدونیم بهتره ) و فکرش فقط سمت توسعه هر چ بهتر منطق برنامه خودش باشه.

    اما برای بعضی از منابع با ارزش و هزینه بر و منابعی ک خارج از دسترس این موتور آشغال جمع کن .net یا همون Garbage Collector هستند ، مثل کانکشن ب بانک اطلاعاتی، منابع و کامپوننت های COM (مثل کار با اکتیو ایکس های قدیمی و ساختارهای سنتی ) ، کار با فایلها ، منابع تحت شبکه ، ... بهتره فکری برای مدیریت اونها سمت برنامه توسط برنامه نویس بشه...


    Understanding Garbage Collection in .NET

  11. #11
    کاربر دائمی آواتار RED-C0DE
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    31 4E 20 20 54 48 33 20 20 28 72 59 70 54 30 47 33 4E 31 28 20 20 5C 2F 30 52 31 7C 7C 29 20 20 7C 2
    پست
    551

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

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

    خود Profiler ک ی مفهوم کلیه، اما در اینجا می تونین برای مثال از CLR Profiler استفاده کنید

  12. #12

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    در کل من توی یه قسمتی از برتامه قراره مشخصات اعضا رو برای ثبت بگیرم از جمله عکسشون
    عکس انتخابی کاربر رو که از طریق اپن دیالوگ میگیرم توی یکی از پوشه های خود پروژه کپی و در picturebox نمایش میدم.
    ممکنه کاربر یه عکس رو انتخاب و بعد پشیمون بشه بخواد یه عکس دیگه انتخاب کنه به خاطر همین چند عکس به پوشه پروژه اضافه میشه.
    هر بار که این فرم باز میشه عکس های به درد نخور قبلی رو قراره پاک کنه در صورتی که اگه کل برنامه باز و بسته نشه امکان حذف اون عکسا (حتی از طریق خود ویندوز) وجود نداره
    میخوام وقتی فرم بسته شد و دوباره فرم باز شد (بدون اینکه application بسته بشه) بتونم عکس های اضافی رو پاک کنم در صورتی که نمیشه
    خلاصه کدهای مربوط به کارم اینا هستن:
    از این کد برای نمایش فرم ثبت اعضا استفاده میکنم
    frmd_members_ned frm = new frmd_members_ned();
    frm.ShowDialog();

    از این کد هم برای کپی عکس انتخاب شده به پوشه های محلی پروژه استفاده میکنم
    OpenFileDialog od = new OpenFileDialog();
    od.Filter = "Image File|*.jpg;*.gif;*.bmp;*.png";
    if (od.ShowDialog() == DialogResult.OK)
    {
    string patch,fn,fe,t = od.SafeFileName;
    int l = t.Length;
    fe = t[l - 4].ToString() + t[l - 3].ToString() + t[l - 2].ToString() + t[l - 1].ToString();
    fn = t.Remove(l - 4);
    DateTime nowdt = DateTime.Now;
    string nows = nowdt.Year.ToString() + "_" + nowdt.Month.ToString() + "_" + nowdt.Day.ToString() + "_";
    nows += nowdt.Hour.ToString() + "_" + nowdt.Minute.ToString() + "_" + nowdt.Second.ToString() + "_" + nowdt.Millisecond.ToString();
    this.Text = nows;
    patch = "..\\members_pic\\temp\\"+nows+fe;
    File.Copy(od.FileName , patch , true);
    pic_member.Image = Image.FromFile(patch);
    pic_name = nows + fe;

    }

    خلاصه کد این هست که با توجه به تاریخ و زمان سیستم یه اسم خودم برای عکس انتخاب و به اونجا انتقال میدم
    اگه کاربر عکس رو اشتباهی انتخاب کرد مسلما دوباره این کد تکرار میشه واسه انتخاب عکس بعدی

    و از این کد هم در فرم لود گذاشتم که قبل از اجرای فرم عکس های اضافی رو پاک کنه
    string[] files = Directory.GetFiles("..\\members_pic\\temp");
    foreach (string s in files)
    {
    File.Delete(s);
    }

    حالا در صورتی که برای بار دوم فرم اجرا بشه به تنها دستور حلقه گیر میده و اونم اینه که فایل مورد نظر درگیر پروسه دیگه هست (البته اون موقع خود ویندوز هم نمیتونه پاکش کنه)

    و در نهایت با یکی از فرم های زیر فرم رو می بندم و نتیجه اجرای همه کدها یکی هست
    this.Dispose();

    this.Close();


    البته کد زیر هم جواب میده به جای دو دستور بالا ولی مشکلش اینه که کلا برنامه ریست میشه و این اصلا خوشایند نیست
    Application.Restart();


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

  13. #13

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    ضمنا وقتی چند عکس رو انتخاب میکنم برای اعضا (یعنی یه عکس انتخاب کردم و پشیمون شدم و عکس دیگه انتخاب کردم) اونوقت همه عکس ها درگیر پروسه میشن و هیچ جوری نمیشه هیچ کدومشون رو تا موقعی که برنامه باز هست پاک کرد. مگه اینکه برنامه بسته یا ریست بشه

  14. #14
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    شما در رویداد Closed فرم، فکر نمیکنم دیگه نیازه به نمایش عکس PictureBox داشته باشی، میتونی اون رو از عکس جدا کنی:

    protected override void OnClosed(EventArgs e)
    {
    if (this.pic_member.Image != null)
    {
    this.pic_member.Image.Dispose();
    this.pic_member.Image = null;
    }
    }

    اگه واقعا مشکل از عکس لود شده ار PictureBox باشه باید حل بشه.
    پ.ن:
    اگه باز هم مشکل داشتین احتمالا مشکل از Image.FromFile هست...از این بجاش استفاده کنید:

    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(patch)))
    {
    pic_member.Image = Image.FromStream(ms);
    }

  15. #15
    کاربر دائمی آواتار ordebehesht
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    یه گوشه دنج از این دنیا
    پست
    845

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    برای اینکار از thread ببین میتونه کمکت کنه نمیگی همه عکسا درگیر پروسس میشن با ترد یکی یکی درگیر شن

  16. #16

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    از thread بلدم استفاده کنم ولی در این مورد چه جوری استفاده کنم؟
    کلا این این کدها به هیچ صراطی مستقیم نمیشن

  17. #17
    کاربر دائمی آواتار ordebehesht
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    یه گوشه دنج از این دنیا
    پست
    845

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نمیدونم یه ایده دادم به تو

    من خودم تازه ترد رو یادگرفتم فقط خواستم بگم ترد هم هست

  18. #18

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط ordebehesht مشاهده تاپیک
    نمیدونم یه ایده دادم به تو

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

  19. #19
    کاربر دائمی آواتار ordebehesht
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    یه گوشه دنج از این دنیا
    پست
    845

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    شرمنده عزیز من فقط یه ایده دادم

  20. #20

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط ordebehesht مشاهده تاپیک
    شرمنده عزیز من فقط یه ایده دادم
    دشمنتون شرمنده
    در حال حاضر هرچی ایده از اینجا و انجمن و گوگل و ... پیدا کردم هیچ جوابی نداد
    نتیجه گرفتم که هروقت فایل قراره پاک بشه اسم و ادرس کامل رو توی یه جدول (جدولی که فقط یک فیلد داره) اضافه بکنم. اونوقت وقتی برنامه تازه اجرا میشه از روی این جدول ادرس ها رو بگیره و فایل ها رو پاک کنه. اونوقته که thread اساسی به درد میخوره
    راست میگن در ناامیدی جای بسی امید است. شاید thread کارم رو راه ننداخت ولی ایده جدیدی که به ذهنم خورد فکر میکنم کارم رو راه بندازه. کمی سورس رو تغییر بدم ببینم جواب میده یا نه

  21. #21
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط FreeMagic مشاهده تاپیک
    من همین جوریش یه مشکل با پروسه در حال اجرا دارم. thread هم اضافه بشه پروسه ای که نمی بنده هیچ، یه پروسه دیگه هم اضافه میشه
    هرچند فکر می کردم درست نمیشه ولی از قدیم گفتن در ناامیدی جای بسی امید هست. از اونم استفاده کردم ولی باز نتیجه ای نداشت
    مشکل شما همونی هست که گفتم...استفاده از Image.FromFile...نمیدونم حل نشد یا دیگه دنبال چی هستین؟

  22. #22

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط plus مشاهده تاپیک
    مشکل شما همونی هست که گفتم...استفاده از Image.FromFile...نمیدونم حل نشد یا دیگه دنبال چی هستین؟
    مشکل من این هست عکس هایی رو که با image.fromfile توی picturebox نمایش میده تا زمانی که کاملا برنامه بسته نشده اجازه پاک کردن اونا رو نمیده.
    فرض کنید من اول عکسی رو کپی و بعد از طریق fromfile توی picturebox نمایش میدم و بعد دوباره عکس picturebox رو عوض میکنم. حالا وقتی میخوام عکس قبلی رو پاک کنم میگه که این عکس درگیر پروسه دیگه هست (خود ویندوز هم نمیتونه پاکش کنه)
    الان مشکل من این هست که این عکس ها پاک بشن بدون اینکه کل برنامه کلا بسته بشه (فقط با ریست برنامه کار راه میفته که اصلا خوشایند نیست)
    نمیدونم منظورم رو تونستم برسونم یا نه؟

  23. #23
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    نقل قول نوشته شده توسط FreeMagic مشاهده تاپیک
    مشکل من این هست عکس هایی رو که با image.fromfile توی picturebox نمایش میده تا زمانی که کاملا برنامه بسته نشده اجازه پاک کردن اونا رو نمیده.
    فرض کنید من اول عکسی رو کپی و بعد از طریق fromfile توی picturebox نمایش میدم و بعد دوباره عکس picturebox رو عوض میکنم. حالا وقتی میخوام عکس قبلی رو پاک کنم میگه که این عکس درگیر پروسه دیگه هست (خود ویندوز هم نمیتونه پاکش کنه)
    الان مشکل من این هست که این عکس ها پاک بشن بدون اینکه کل برنامه کلا بسته بشه (فقط با ریست برنامه کار راه میفته که اصلا خوشایند نیست)
    نمیدونم منظورم رو تونستم برسونم یا نه؟
    دوست عزیز پست اول من رو اصلا خوندین؟

  24. #24

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    راستش الان دیدمش ولی کد اولی که جواب نداد و این هم کد دوم شما هست
    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(patch)))
    {
    pic_member.Image = Image.FromStream(ms);
    }

    ولی توی این کد خود vs به patch گیر داده که فکر میکنم منظور شما آدرس کامل عکس هست؟ اگه منظور شما آدرس کامل عکس هست با چه عکسی بودین؟
    عکس اضافه ای که کاربرد نداره باید ادرسش رو توی patch بزارم؟

  25. #25
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    patch اسم متغیری هست که خودتون تعریف کردین!! چطور منظور ازش رو متوجه نمیشید.

    OpenFileDialog od = new OpenFileDialog();
    od.Filter = "Image File|*.jpg;*.gif;*.bmp;*.png";
    if (od.ShowDialog() == DialogResult.OK)
    {
    string patch,fn,fe,t = od.SafeFileName;
    int l = t.Length;
    fe = t[l - 4].ToString() + t[l - 3].ToString() + t[l - 2].ToString() + t[l - 1].ToString();
    fn = t.Remove(l - 4);
    DateTime nowdt = DateTime.Now;
    string nows = nowdt.Year.ToString() + "_" + nowdt.Month.ToString() + "_" + nowdt.Day.ToString() + "_";
    nows += nowdt.Hour.ToString() + "_" + nowdt.Minute.ToString() + "_" + nowdt.Second.ToString() + "_" + nowdt.Millisecond.ToString();
    this.Text = nows;
    patch = "..\\members_pic\\temp\\"+nows+fe;
    File.Copy(od.FileName , patch , true);
    // pic_member.Image = Image.FromFile(patch);
    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(patch)))
    {
    pic_member.Image = Image.FromStream(ms);
    }
    pic_name = nows + fe;

    }

  26. #26

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    ببخشید فکر کردم منظورتون از patch یه ادرس دیگه هست
    توی اون کدی که شما نوشتید مقدار patch آخرین عکسی هست که استفاده میشه. من توی کد جایگزینی شما ادرس یه عکس به دردنخور رو دستی گذاشتم. وقتی دوباره فرم رو اجرا کردم. همون مشکل پیش اومد یعنی باز گفت که درگیر پروسه دیگه هست

  27. #27

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    دوست عزیز بهترین کار اینه که شما به ازای هر بار که عکس مورد نظر رو در picture box عوض می کنین قبلش عکس قبلی اونو dispose کنین. مطمئن باشین که جواب میده. ;-)
    یعنی به این صورت:
    OpenFileDialog od = new OpenFileDialog();
    od.Filter = "Image File|*.jpg;*.gif;*.bmp;*.png";
    if (od.ShowDialog() == DialogResult.OK)
    {
    string patch,fn,fe,t = od.SafeFileName;
    int l = t.Length;
    fe = t[l - 4].ToString() + t[l - 3].ToString() + t[l - 2].ToString() + t[l - 1].ToString();
    fn = t.Remove(l - 4);
    DateTime nowdt = DateTime.Now;
    string nows = nowdt.Year.ToString() + "_" + nowdt.Month.ToString() + "_" + nowdt.Day.ToString() + "_";
    nows += nowdt.Hour.ToString() + "_" + nowdt.Minute.ToString() + "_" + nowdt.Second.ToString() + "_" + nowdt.Millisecond.ToString();
    this.Text = nows;
    patch = "..\\members_pic\\temp\\"+nows+fe;
    File.Copy(od.FileName , patch , true);
    pic_member.image.dispose();

    pic_member.Image = Image.FromFile(patch);
    pic_name = nows + fe;

    }




  28. #28

    نقل قول: رها کردن کامل منابع بعد از بستن فرم

    بهتره یه نگاه به تاریخش بندازین بعد جواب تایپیکو بدین
    سه شنبه 17 بهمن 1391, 21:09 بعد از ظهر

تاپیک های مشابه

  1. کار کردن ناگهانی دکمه ESC در بستن فرم
    نوشته شده توسط hasandrw در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 6
    آخرین پست: دوشنبه 21 شهریور 1390, 12:26 عصر
  2. سوال: کار با دو فرم(بافی ماندن مقادیر بعد از بستن فرم)
    نوشته شده توسط morrteza323 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 15 شهریور 1389, 19:01 عصر
  3. سوال: اضافه کردن Master Page بعد از ساخت فرم ها؟
    نوشته شده توسط jimi67 در بخش ASP.NET Web Forms
    پاسخ: 6
    آخرین پست: شنبه 10 مرداد 1388, 11:08 صبح
  4. سوال: حذف تغییرات بعد از بستن فرم
    نوشته شده توسط sa_ostad در بخش C#‎‎
    پاسخ: 9
    آخرین پست: جمعه 11 مرداد 1387, 23:36 عصر
  5. آزاد کردن RAM بعد از بستن فرم
    نوشته شده توسط Payman62 در بخش C#‎‎
    پاسخ: 49
    آخرین پست: پنج شنبه 20 دی 1386, 17:14 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •