PDA

View Full Version : سوال: public thread abort



MehdiElexal
شنبه 22 فروردین 1394, 14:50 عصر
باسلام خدمت دوستان گل چند تا سوال داشتم
1. تردی که داخل فرضا یک دکمه ایجاد میشه چطور میشه از یک دکمه (btn) دیگه abort یا ببندیمش و غیر فعال شه
2.چطور میشه ازفرم های دیگه abort شه ؟
3.چطور میشه ترد بصورت عمومی تعریف شه و از همه جا مثل متغییر های پاپلیک بهش دسترسی داشت و کلوزش کرد ؟
---------------
لطفا پاسخ هاتون رو شفاهی ندید و در قالب تیکه کد بدید ممنون میشم تا سایر دوستان نیز بتونند استفاده کنن + اینجانب ، تشکر از همه (بنده با مفاهیم نخ ها آشنایی دارم ، اما الان با عمومیتش به مشکل خوردم )

تشکر فرآوان :لبخندساده::لبخندساده:

MehdiElexal
شنبه 22 فروردین 1394, 19:11 عصر
دوستان کسی نیست پاسخی بده ؟

MehdiElexal
چهارشنبه 26 فروردین 1394, 11:08 صبح
چرا جدیدا برنامه نویس پکیده و کسی توش نیست ؟ کجا کوچ کردید بگید ماهم بدونیم !

plus
چهارشنبه 26 فروردین 1394, 17:55 عصر
Thead یک کلاس هست شما میتونی یک شی از اون رو هر جا که میخوای تعریف کنی و از طریق متد Abort اون رو ببندی.

public partial class Form1 : Form {
private Thread thread;
..
..
private void button1_Click(object sender, EventArgs e) {
this.thread = new Thread(....);
..
..
this.thread.Start();
}
private void button2_Click(object sender, EventArgs e) {
if (this.thread != null && this.thread.IsAlive) {
this.thread.Abort(); // DONT DO IT
}
}
...
...
}

هر چند که بستن Thread بوسیله متد Abort کار صحیحی نیست. بجای اون، باید با استفاده از متغیرها کاری کنید که اجرای Thread خاتمه پیدا کنه.
برای مثال

public partial class Form1 : Form {
private bool cancelled;
..
..
private void button1_Click(object sender, EventArgs e) {
ThreadStart threadStart = new ThreadStart(ThreadMethod);
this.thread = new Thread(threadStart );
..
..
this.thread.Start();
}
private void ThreadMethod() {
this.cancelled = false;
int i = 0;
while (i < 10000 && !this.cancelled) {
// Do something
}
}
private void button2_Click(object sender, EventArgs e) {
if (this.thread != null && this.thread.IsAlive) {
this.cancelled = true;
}
}
...
...
}

البته این مثال خیلی دقیق نیست ولی مفهوم رو میرسونه. در ضمن خیلی مواقع میتونید از بجای Thread از کنترل BackgroundWorker استفاده کنید که مناسب تر هست و مکانیزم Cancel رو بهتر پیاده سازی کرده.