PDA

View Full Version : سوال: استفاده از IAsyncResult در متد Callback تایمر



water_lily_2012
یک شنبه 10 آذر 1392, 15:06 عصر
سلام
یک تایمر دارم که ورودی متدی که فراخوانی میکنه از نوع object هست. اگر بخواهم IAsyncResult قرار بدهم باید چه کار کنم. یعنی object بهش بدهم ولی نوع پارامتر در متد IAsyncResult باشه. مثل متدهای موجود در Socket

مثلا به متد BeginReceiveFrom در Socket یک object میدهیم ولی نوع پارامتر callback ان IAsyncResult هست.
می خواهم نوع پارامتر callback تایمر هم IAsyncResult باشه.
امکان چنین چیزی هست؟؟

تشکر

water_lily_2012
یک شنبه 10 آذر 1392, 20:12 عصر
کسی راهی نداره برای این کار.
حتی یه چیز غیر از تایمر نمیشه استفاده کرد؟؟

plus
یک شنبه 10 آذر 1392, 20:26 عصر
اگه یکم بیشتر توضیح بدین، بهتر میشه جواب داد.کلاس Timer استاندارد #C رو که نمیگین؟
اگه منظورتون این هست که کلاس مورد نظر، یک متد با وردی object میگیره و اون رو هر دفعه فراخوانی میکنه...object یک نوع هست ولی IAsyncResult یک interface.اگه اینطور که میگین باشه، کلاس شما، هر چی بهش بدین رو به متد مورد نظر ارسال میکنه ولی ظاهرا دخالتی در اون مقدار نمیکنه...واسه همین نوع رو object تعریف کرده که شما رو محدود نکنه.ولی در BeginReceiveFrom ی که در کلاس Socket هست، Socket از شما متدی از نوع AsyncCallback میخواد و در پارامتری که به این متد ارسال میشه دخیل هست (مثلا مقدار CompletedSynchronously رو تعیین میکنه).
حالا شما اگه کاملتر بگی میخوای چکار کنی بهتر میشه کمک کرد.

water_lily_2012
یک شنبه 10 آذر 1392, 21:00 عصر
سلام
خب چرا که نه.
احتمالا متد BeginReceiveFrom که من استفاده می کنم را می شناسید. این متد بعد از فراخوانی منتظر می مونه تا یک داده دریافت شده و Callback خودش را صدا بزنه و یک کاری انجام بشه.
خب حالا اومد و به هر دلیلی داده دریافت نشد و کاری که قرار بود انجام بشه انجام نمیشه و برنامه در این قسمت می مونه.
خب می خوام که یک کاری بکنم که اگر داده ای دریافت نشد بعد از چند ثانیه Callback صدا زده بشه و یا متد دیگری شبیه Callback.
خب گفتم که یک تایمر می گذارم ولی اگر بدونید ورودی متد Callback از نوع IAsyncResault می باشد ولی در تایمر نه. بعد مشکل اینکه باید در CallBack تایمر EndReceiveFrom کنم و به IAsyncResaul نیاز دارم.

فکر کنم کامل گفتم.

plus
یک شنبه 10 آذر 1392, 21:57 عصر
مطمئن نیستم استفاده از Timer برای کاری که میخواین بکنید درست باشه ولی به هر حال، شاید بتونید خروجی BeginReceiveFrom رو که از نوع IAsyncResult هست رو جایی نگه دارین و در تایمر به EndReceiveFrom بدین.