PDA

View Full Version : معادل Application.MessageProcess



AlirezaBahredar
چهارشنبه 07 آذر 1386, 15:22 عصر
با سلام
چند مدت پیش من و یکی از دوستان سایت(آقای نعمتی) مشترکا به یک مشکل برخوردیم و اون این بود که
اگه بخواهیم در یک Service معادلی برای Application.ProcessMessage داشته باشیم چکار بایستی کرد.برخی از دوستان ایجاد یک Thread رو برای کنترل کردن Message ها پیشنهادکرده بودند...در این رابطه من نظری ندارم ....
اما سرانجام این مشکل بطور اتفاقی حل شد.
بله معادل Application.ProcessMessageدر یک Service دستور زیر می باشد


while not Terminated do
ServiceThread.ProcessRequests(True);

که بایستی در متد Onexecute اون Service نوشته شود.

m-khorsandi
پنج شنبه 08 آذر 1386, 11:44 صبح
Application.ProcessMessages;

A.Nemati
شنبه 10 آذر 1386, 09:39 صبح
می‌دونم عرف نیست که مسئله حل شده پاسخ داده بشه ولی فکر کردم که لازمه

ممنون آقای بحره‌دار عزیز.
ولی تا جایی که من می‌دونم، یک سرویس وقتی متد Onexecute اون به پایان برسه، در واقعه وظیفه‌اش به اتمام رسیده و کارش تموم می‌شه. این کد برای اینه که تا زمانی که سرویس Terminate نشده (متد Terminat فراخوانی نشده)، Threadهای دیگه سرویس از بین نرن و به کارشون ادامه بدن.
کاری که من می‌خواستم انجام بدم در متد Onexecute نیست، من می‌خوام توی هر متد دیگه و هر یونیت دیگه‌ای توی سرویس که لازم باشه، این کار انجام بشه.
به هر حال بازم از توجهتون ممنون.
واقعیتش اینه که من مدتیه سرم به کار دیگه‌ای گرم شده و دیگه سراغ این مسئله نرفتم. اگه دوباره برگشتم و راهی پیدا کردم، حتما برای همه می‌نویسم.




Application.ProcessMessages;
آقای خرسندی، بحث سر این بود که سرویس، چیزی به نام Application.ProcessMessages نداره و دنبال یک معادل برای اون می‌گشتیم.

m-khorsandi
شنبه 10 آذر 1386, 10:06 صبح
دقت نکردی و به همین خاطر زمانی رو صرف نوشتن توضیح کردی.

متن AlirezaBahredar رو با دقت بخون، من راه‌حل ندادم.
در ضمن مسئله‌ی حل شده صرفاً نمیتونه یک راه حل داشته باشه.

vcldeveloper
شنبه 10 آذر 1386, 11:22 صبح
جایی که من می‌دونم، یک سرویس وقتی متد Onexecute اون به پایان برسه، در واقعه وظیفه‌اش به اتمام رسیده و کارش تموم می‌شه.

کاری که من می‌خواستم انجام بدم در متد Onexecute نیست، من می‌خوام توی هر متد دیگه و هر یونیت دیگه‌ای توی سرویس که لازم باشه، این کار انجام بشه.
شما هر متد دیگری را در هر یونیتی استفاده کنید، برای اجرا شدن باید مستقیم یا غیر مستقیم از طریق همین رویدادگردانی که به OnExecute متصل است فراخوانی شود. به عبارت دیگه، هر کاری که در این سرویس انجام میدید در محدوده شروع تا پایان اجرای این رویدادگردان اتفاق میافته. دیگه فرقی نمیکنه شما کد مربوطه (ProcessRequest) را کجا بنویسید؛ اگر اجرا میشه، پس در داخل OnExecute فراخوانی شده.