PDA

View Full Version : غیر فعال کردن یک رویداد از درون رویداد دیگر



Armin060
پنج شنبه 28 آذر 1387, 20:37 عصر
چطوری میشه فعالیت یک رویداد رو از توی یه رویداد دیگه غیر فعال کرد؟ یعنی به اون رویداد خاتمه داد. حتی اگر در حال انجام عملیات هست، در هر صورت انجام عملیات رو ول کنه ( اون رویدادی که قراره غیر فعال بشه ). جست و جو هم کردم، ولی چیزی پیدا نکردم...
با تشکر...:لبخند:

Sajjad.Aghapour
جمعه 29 آذر 1387, 10:34 صبح
private void button1_Click(object sender, EventArgs e)
{
//
}

private void button2_Click(object sender, EventArgs e)
{
button1.Click -= new EventHandler(button1_Click);
}

Armin060
جمعه 29 آذر 1387, 11:44 صبح
کدی که شما دادید، event اختصاص داده شده به Button1 رو پاک میکنه، از انجام عملکرد در حال حاضر جلو گیری نمیکنه

RED-C0DE
جمعه 29 آذر 1387, 12:04 عصر
چه کاری می خواید انجام بدین؟ شاید راه مناسبتری براش باشه...

h.jaza
جمعه 29 آذر 1387, 12:10 عصر
کدی که شما دادید، event اختصاص داده شده به Button1 رو پاک میکنه، از انجام عملکرد در حال حاضر جلو گیری نمیکنه
خوب واضحه، زمانی که شما در یک رویداد هستین که نمیشه اون رویداد رو کنسل کرد. مگه اینکه با یه شرطی از اون خارج بشین ولی زمانی که در یک رویداد دیگه هستین میشه یک رویداد دیگه رو کنسل کرد.

Sajjad.Aghapour
جمعه 29 آذر 1387, 12:36 عصر
اینطوری راهی به ذهنم نمی رسه ولی وقتی شما از رویداد یه دکمه استفاده می کنی تا به پایان نرسه نمیتونی از یه رویداد دیگه استفاده کنی مگه اینکه از چیزهایی مثل Thread استفاده کنی.که در این صورت می تونی اون thread رو abort کنی و به اون رویداد خاتمه بدی..

Armin060
جمعه 29 آذر 1387, 15:13 عصر
اینطوری راهی به ذهنم نمی رسه ولی وقتی شما از رویداد یه دکمه استفاده می کنی تا به پایان نرسه نمیتونی از یه رویداد دیگه استفاده کنی مگه اینکه از چیزهایی مثل Thread استفاده کنی.که در این صورت می تونی اون thread رو abort کنی و به اون رویداد خاتمه بدی..
خوب چطوری، میتونی یه کد بهم بدی. من از Tread فقط Sleep رو بلدم.

Sajjad.Aghapour
جمعه 29 آذر 1387, 16:43 عصر
برای مثال شما نمی تونی رویداد کلیک دکمه 1 رو توسط یه رویداد دیگه در حالت زیر غیر فعال کنی تا وقتی که 10 تا پیغام ببینی


private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
MessageBox.Show("sa");

}

ولی در حالت زیر این کار ممکن میشه...


Thread t;
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(s));
t.Start();
}

private void button2_Click(object sender, EventArgs e)
{
t.Abort();
}

void s()
{
for (int i = 0; i < 100; i++)
MessageBox.Show("sa");
}