رفع مشکل در ویژال بیسیک

amirxbest

Member
دوستان من رو فرم یک تایمر دارم که دستوراتم رو اجرا میکنه(تغیر مکان یک شی) وقتی با ماوس دکمه exit فرم رو نگه میدارم تایمر متوقف میشه (pause) و وقتی بر میدارو باز شروع به کار میکنه(run) میخواستم بدونم چجور میتونم این مشکل رو حل کنم؟
N_aggressive%20%2826%29.gif
 

the_king

مدیرکل انجمن
دوستان من رو فرم یک تایمر دارم که دستوراتم رو اجرا میکنه(تغیر مکان یک شی) وقتی با ماوس دکمه exit فرم رو نگه میدارم تایمر متوقف میشه (pause) و وقتی بر میدارو باز شروع به کار میکنه(run) میخواستم بدونم چجور میتونم این مشکل رو حل کنم؟
N_aggressive%20%2826%29.gif
متاسفانه راه حل مناسبی برای این مشکل سراغ ندارم، این مساله مربوط به ساختار ویژوال بیسیک و نحوه
اجرا کردن کد ها است و تغییر دادنش عملی نیست.

ویژوال بیسیک برنامه ها رو تک نخی (Thread) و با مکانیسم Single Apartment می سازه، یعنی همه عملیاتی که قراره توی کدتون انجام بشه
در یک نخ قرار داره و تا زمانی که کد های یک روال بصورت کامل اجرا نشده سراغ اجرا کردن
هیچ روال دیگه ای نمیره، حتی تایمر ها که باعث اجرا شدن یک رخداد می شوند تنها زمانی عمل می کنند که
روال دیگری در حال اجرا نیست. یعنی اگر یک روالی نخ رو مشغول کنه، هیچ رخداد دیگه ای اجرا نمیشه.
به عنوان مثال کد زیر رو در دکمه Command1 بنویسید، اگر روی دکمه کلیک کنید برنامه و رخداد های Timer رسما
قفل می کنند و اجرا نخواهند شد :
کد:
Private Sub Command1_Click()
    Do
    Loop
End Sub

خلاصه اینکه هیچ کاری همزمان انجام نمیشه. به همین دلیل وقتی یک رخدادی مثل کلیک کردن روی دکمه Close
فرم پیش میاد اجرای رخداد های دیگه موقتا متوقف میشه.

راه حل این مشکل ساختن برنامه های چند نخی (Multi Thread) است که ویژوال بیسیک ذاتا پشتیبانی نمی کنه.
ساختن برنامه های چند نخی با ویژوال بیسیک دردسر زیاد داره، مخصوصا که شما باید از داخل نخ دوم به کنترل های
روی فرم دسترسی داشته باشید که با ساختار ویژوال بیسیک جور در نمیاد.

توصیه می کنم به ویژوال بیسیک Net. مهاجرت کنید.
 

amirxbest

Member
حرفتون کاملا درسته.:wink:
حالا به نظر شما به چه نسخه ای از vb.net رو انتخاب کنم؟؟؟
تا حدودی با vb.net 2010 کار کردم که یه مقدار دستورات عوض شده بود.
ممنون میشم از راهنماییتون.
 

the_king

مدیرکل انجمن
حرفتون کاملا درسته.:wink:
حالا به نظر شما به چه نسخه ای از vb.net رو انتخاب کنم؟؟؟
تا حدودی با vb.net 2010 کار کردم که یه مقدار دستورات عوض شده بود.
ممنون میشم از راهنماییتون.

فرقی نمی کنه که کدوم نسخه Visual Studio باشه، مخصوصا که در Project Properties می توانید نسخه
Target Framework رو عوض کنید، یعنی فرضا اگر در Visual Studio 2010 از Net Framework 2.0 استفاده کنید
مثل این می مونه که با Visual Studio 2005 کد می نویسید و از قابلیت های نسخه های بالاتر استفاده نمیشه.
 

جدیدترین ارسال ها

بالا