PDA

View Full Version : بی اثر کردن دستور Application.DoEvents



مهران رسا
دوشنبه 30 آذر 1388, 22:17 عصر
سلام . آیا راهی برای بی اثر کردن دستور Application.DoEvents وجود داره ؟ به عبارت ساده تر ، کد زیر رو در نظر بگیرید :




For (int i = 1 to 9999999)
{
console.write(i);
Application.DoEvents


آیا راهی وجود داره که برای مثال وقتی مقدار شمارنده i از 9999 بزرگتر شد دستور Application.DoEvents حذف بشه از کد؟ یعنی در واقع روال اجرای کد به حالت اولیه برگرده ؟

AliRezaPro
سه شنبه 01 دی 1388, 00:16 صبح
شما نمیتونید با return یا Continue این مشکل رو بر طرف کنید؟

Soroush.Sarabi
سه شنبه 01 دی 1388, 09:44 صبح
دوست عزیز نیازی نیست که Application.DoEvents رو داخل حلقه قرار بدی می تونی اونو بیرون بزاری و

درون حلقه با یک if چک کنی و بعد برای خروج از break استفاده کنی البته اگه منظورت رو درست متوجه

شده باشم.


--------------------------------------------------
فیلم های رایگان آموزش عملی #C به همراه نمونه کدهای انجام شده

وب سایت رسمی سروش سارابی مدرس،مشاور و تحلیلگر سیستم

www.soroush-sarabi.com (http://www.soroush-sarabi.com/)

مهران رسا
سه شنبه 01 دی 1388, 12:22 عصر
درون حلقه با یک if چک کنی و بعد برای خروج از break استفاده کنیخیر . منظورم این نبود . اجازه بدین واضح تر بیان کنم .

وقتی یک حلقه در حال اجرا شدن هست یک وقفه در Application ایجاد می کنه . برای جلوگیری از این اتفاق می تونیم از دستور Application.DoEvents استفاده کنیم . که در این صورت در حین اجرای دستورات حلقه میشه به اجزای دیگر App هم دسترسی داشت .

حالا کد زیر رو در نظر بگیرین :


For (int i = 1 to 9999999)
{
console.write(i);
Application.DoEvents

آیا میشه کاری کرد که در طی اجرای دستورات حلقه بالا ، زمانی که به یه شرط خاص برخورد کردیم دستور Application.DoEvents بی اثر بشه ؟ به عبارت ساده تر ، به دلیل استفاده از Application.DoEvents ، تا الآن برنامه ما بدون وجود وقفه کار میکنه . ولی اگه مثلاً بخوایم وقتی مقدار شمارنده i از 9999 بزرگتر شد دوباره به حالت اولیه خود برگرده (یعنی اون حالت شبیه وقفه در برنامه مجدداً اتفاق بیفته) راهی رو پیشنهاد می کنید ؟

mehdi.mousavi
سه شنبه 01 دی 1388, 12:54 عصر
ولی اگه مثلاً بخوایم وقتی مقدار شمارنده i از 9999 بزرگتر شد دوباره به حالت اولیه خود برگرده (یعنی اون حالت شبیه وقفه در برنامه مجدداً اتفاق بیفته) راهی رو پیشنهاد می کنید ؟

سلام.
ابتدا به این پست رجوع کنید (http://barnamenevis.org/forum/showpost.php?p=865882&postcount=2)، تا متوجه بشید که چرا نباید هرگز از DoEvents استفاده کرد.
شما باید در واقع این کار زمانبر رو در یک Thread دیگه انجام بدید. نه اینکه سعی کنید کنترل Message های Message Queue رو در اختیار بگیرید. چیزی که شما بدنبالش هستید با نوشتن یک Message Filter میسره، اما چون دوست ندارم استفاده از این روش رو رواج بدم، بهتون بازهم توصیه میکنم بطور کل از DoEvents صرف نظر کنید و کار رو اصولی انجام بدید. کدی که توش از DoEvents استفاده شده باشه، error-prone هست...

موفق باشید.