PDA

View Full Version : سوال: thread.pause -> thread.abort -> ERROOOOR



black_wear
سه شنبه 20 اسفند 1387, 17:53 عصر
سلام
ببخشید اگه شاید بحث تکراری است.
در کار با thread ها اگر threadی را pause نماییم و قبل از اجرای مجدد آن( resume) کاربر از برنامه خارج شود برنامه اتمام پیدا نخواهد کرد و در حافظه باقی خواهد ماند. حال چه باید کرد تا هنگام بستن برنامه همه thread ها خاتمه یابند؟

NewFoxStudent
سه شنبه 20 اسفند 1387, 18:05 عصر
توی فایل Program برنامه کد زیر رو اضافه کنید



Application.ThreadExit+=new EventHandler(Application_ThreadExit);


بعد متد زیر رو همونجا ایجاد کن و توش تمام thread ها رو ببند



private void Application_ThreadExit(object sender, EventArgs e)
{

}

black_wear
سه شنبه 20 اسفند 1387, 22:17 عصر
برنامه را اینجا قرار می دهم اگه میشه اون رو بگیرید قسمت هایی رو که گفتید روی اون برام مشخص کنید.
در ضمن مشکل دیگری هم که وجود داشت اینه که اگه threadی pause بشه بعد abort بشه برنامه با مشکل مواجه میشه.
ممنون میشم اگه راهنمایی ام کنید.:لبخندساده:

NewFoxStudent
چهارشنبه 21 اسفند 1387, 11:42 صبح
threading (windows form).rar (http://barnamenevis.org/forum/attachment.php?attachmentid=29205&stc=1&d=1236760886)

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

black_wear
چهارشنبه 21 اسفند 1387, 18:54 عصر
خیلی ممنون که جوابمو دادید
البته یه مشکلی هست! اولا چطوری در program.cs ، به نخها دسترسی داشته باشم ؟
و حال اگر منظور شما اینه که قبل اتمام برنامه thread ها را یکی یکی abort کنم فکر کنم این روش درستش نباشه!! (البته اگه منظور شما این بوده باشه)

mostafaaa
چهارشنبه 21 اسفند 1387, 19:59 عصر
سلام
ببخشید اگه شاید بحث تکراری است.
در کار با thread ها اگر threadی را pause نماییم و قبل از اجرای مجدد آن( resume) کاربر از برنامه خارج شود برنامه اتمام پیدا نخواهد کرد و در حافظه باقی خواهد ماند. حال چه باید کرد تا هنگام بستن برنامه همه thread ها خاتمه یابند؟
دوست من فقط کافی در رویداد FormClosing کد زیر رو استفاده کنید تا همه Thread ها هم بسته بشن.

System.Environment.Exit(0);
یا علی

black_wear
پنج شنبه 22 اسفند 1387, 10:43 صبح
آقا مصطفی خیلی ممنون یکی از مشکلاتم حل شد .
ولی مشکل دیگه ام هنوز حل نشده کسی راه حل نداره؟
مشکل این بود: اگه threadی pause بشه بعد abort بشه برنامه با مشکل مواجه میشه.
ممنون میشم اگه راهنمایی ام کنید

راه حل خودم این بود که در قسمت مربوط به لغو THREAD این کد را بنویسم:


if (thread1.ThreadState == ThreadState.Suspended || thread1.ThreadState == ThreadState.SuspendRequested)
{
thread1.Resume();
thread1.Abort();
}
else

thread1.Abort();



و البته مشکل هم حل میشه ولی آیا راه درستش همینه؟!

black_wear
دوشنبه 26 اسفند 1387, 13:14 عصر
کسی اینجا جواب سوال من را بلد نیست؟! :ناراحت: