PDA

View Full Version : سوال: لزوم استفاده از Application.DoEvents() در VB.Net



vb.civil
جمعه 31 شهریور 1396, 10:38 صبح
سلام دوستان
برنامه ای رو در ویژوال بیسیک 6 نوشتم و حالا اونو تبدیل کردم به ویژوال بیسیک دات نت . . .

اختلافی که وجود داشت این بود که من برای اینکه کاربر متوجه روند پیشرفت برنامه بشه کپشن یک Label رو مدام عوض میکردم تا کاربر متوجه بشه که برنامه در حال انجام چه کاری هست

همون کار رو هم در دات نت انجام دادم وقتی اینقدر سریع عملیات انجام میشد که فرصتی برای تغییر کپشن Label نبود مجبور شدم مدام از Application.DoEvents() استفاده کنم تا برنامه فرصت کنه این تغییر رو نمایش بده . . .

ضمن اینکه سرعت برنامه با دات نت خیلی بیشتر از ویژوال بیسیک 6 بود . . .

میخواستم دلیل این اتفاق رو بپرسم ؟
ممنون

samiasoft
جمعه 31 شهریور 1396, 21:50 عصر
بهترین کار برای نحوه پیشرفت برنامه استفاده از ترد هستش...که بحث زیادی در موردش شده جستجو کنید

در مورد اتفاقی هم که گفتید بایستی کدتون رو بزارید تا بررسی کنیم

vb.civil
شنبه 01 مهر 1396, 10:57 صبح
بهترین کار برای نحوه پیشرفت برنامه استفاده از ترد هستش...که بحث زیادی در موردش شده جستجو کنید

در مورد اتفاقی هم که گفتید بایستی کدتون رو بزارید تا بررسی کنیم

راستش در مورد ترد هیچی نمیدونم . . . چی باید سرچ کنم تا راجع بهش اطلاعاتی پیدا کنم . . .

اما الان مشکل من این کد ساده هست که اونطوری که انتظار دارم کار نمیکنه . . .

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer
Button1.Text = "Test Progress Bar"
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 10000
Button1.Text = "Wait . . . "
'Application.DoEvents()
For i = 1 To 10000
ProgressBar1.Value = i
Next
Button1.Text = "Test Progress Bar"
End Sub
End Class

تو این کد انتظارم هست تا زمانی که حلقه داره تکرار میشه متن باتن بشه Wait . . . بعد دوباره به حالت اول برگرده که به درستی نمایش داده نمیشه . . .

محمد آشتیانی
شنبه 01 مهر 1396, 15:20 عصر
سلام
این نمونه رو ببینید

vb.civil
شنبه 01 مهر 1396, 17:56 عصر
سلام
این نمونه رو ببینید

مرسی دوست عزیز :تشویق: . . . کد خوبی بود ولی نسبت به اون کد ساده ای که تو VB.6 نوشتم یه مفاهیم جدیدی داشت که باید روش کار کنم . . . (البته تو این نمونه هم وقتی ProgressBar به حدود 80% میرسید متن به حالت اول برمیگشت . . . انگار ProgressBar کند عمل میکرد . . . )

ممنون بابت راهنمایی :لبخندساده:

محمد آشتیانی
شنبه 01 مهر 1396, 20:30 عصر
مرسی دوست عزیز :تشویق: . . . کد خوبی بود ولی نسبت به اون کد ساده ای که تو VB.6 نوشتم یه مفاهیم جدیدی داشت که باید روش کار کنم . . . (البته تو این نمونه هم وقتی ProgressBar به حدود 80% میرسید متن به حالت اول برمیگشت . . . انگار ProgressBar کند عمل میکرد . . . )

ممنون بابت راهنمایی :لبخندساده:

سلام
کد کاملا درست عمل میکنه و دقیقا وقتی حلقه تموم میشه ، تکست دکمه هم عوض میشه ، اون تاخیر پراگرس بار مربوط به خودشه و ماهیتش اینجوریه و کاریش نمیشه کرد.


موفق باشید