PDA

View Full Version : سوال: بهترین راه رسیدگی به این رویدادها چیست؟



__IDIN
شنبه 06 اسفند 1390, 18:16 عصر
سلام به همگی.
به قطعه کد زیر توجه کنید.

public int Execute()
{
//کدهاي اصلي کلاس در اين قسمت قرار مي گيرند

}
public void MessageReceived()
{
//در زمان به وقوع پيوستن رويداد اين تابع توسط کلاس ديگري صدا زده مي شود
}
public void OnTrigger()
{
//اين رويداد توسط کلاس ديگري صدا زده مي شود
}




به نظر شما راه حل مناسبی وجود دارد که بدون نوشتن کدهای اصلی درون توابع رویداد، متد Execute به نحوی منتظر به وقوع پیوستن رویدادها باشد و تمام کدهای اصلی داخل متد Execute بماند و زمانی که رویداد خاصی به وسیله صدا زده شدن دو متد دیگر رویداد داد متد Execute به آن رسدیگی کند.
با تشکر.

Leon_SFS
شنبه 06 اسفند 1390, 20:45 عصر
دقیقا نفهمیدم چی میگی!:گیج:
میتونی بزاری تو تایمر هر بار که لازم بود فراخوانیش میکنی(حی چک کنه خودش که کی لازمه فراخوانی شه)
از ترد هم میتونی استفاده کنی

__IDIN
شنبه 06 اسفند 1390, 21:23 عصر
دقیقا نفهمیدم چی میگی!:گیج:
میتونی بزاری تو تایمر هر بار که لازم بود فراخوانیش میکنی(حی چک کنه خودش که کی لازمه فراخوانی شه)
از ترد هم میتونی استفاده کنی
درسته از تایمر هم میشه استفاده کرد.ولی ترجیح می دم استفاده نکنم.
دو تابع MessageReceived و OnTrigger زمانی که اتفاق خاصی بیفته صدا زده میشن(خارج از این کلاس). حالا بهترین حالت برای اینکه تابع Execute متوجه بشه که این توابع صدا زده شدن به نظرت چیه؟

private bool MessageReceived;
private bool OnTrigger;

public int Execute()
{
// some code
if(MessageReceived)
if(OnTrigger)
//do somthing

}
public MessageReceived()
{
MessageReceived = true;
}
public OnTrigger()
{
OnTrigger = true;
}

مثلا تو این کد زمانی که متد Execute اجرا میشه فقط چک می کنه که آیا پیغام جدید اومده یا نه بعدش اگه تو اون زمان پیغامی نیومده بود اجرای متد Execute به آخرش می رسه و از متد خارج می شه.
ولی باید یه جور دیگه کار کنه یعنی روی if اول وایسه و تا زمانی که پیغام جدیدی نرسیده و متغیر MessageReceived برابر true نشده کار دیگه ای نکنه.
یکی از راه حلاش اینه :


private bool MessageReceived;
private bool OnTrigger;
public int Execute()
{
//some code
}
public MessageReceived()
{
if(OnTrigger)
//do somthing
}
public OnTrigger()
{
OnTrigger = true;
}


ولی این مدل کد کردن باعث میشه که بدنه برنامه که بهتره تو متد Execute اجرا بشه تکه تکه شده و در توابع رویداد تقسیم بشه که من ترجیج می دم این طوری نشه.
امیدوارم که منظورم رو رسونده باشم.