peymannaji
یک شنبه 18 اسفند 1387, 23:33 عصر
با سلام .
من یک فرم دارم که در اون یک دکمه وجود داره + progress bar و یک backgroundworker هم اضافه کردم به صفحه . کد های درون فرم به شکل زیر :
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Sub Doit()
Dim a As Integer = 0
Dim prog As Double = 100 / 5
Dim current As Integer = 0
For i As Integer = 0 To 5
System.Threading.Thread.Sleep(1000)
a += 1
BackgroundWorker1.ReportProgress(current)
current += prog
Next
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Doit()
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
MsgBox("completed")
End Sub
End Class
خوب این کدها مشکلی نداره با کلیک بروی دکمه progress bar شروع میکنه به پر شدن تا زمانی که تابع کارشو کامل انجام بده . اما مشکل از اونجایی شروع میشه که من یک کلاس ایجاد میکنم و تو اون تابع DoIT رو paste میکنم . و کمی تغییر . کد زیر :
Public Class Progress
Shared Sub Doit()
Dim a As Integer = 0
Dim prog As Double = 100 / 5
Dim current As Integer = 0
For i As Integer = 0 To 5
System.Threading.Thread.Sleep(1000)
a += 1
Form1.BackgroundWorker1.ReportProgress(current)
current += prog
Next
End Sub
End Class
همه کارها خوب انجام میشه اما تنها مشکلی که هست progressbar مقدار میگیره اما پر نیمشه ...
دوستان عزیز راهنمایی بفرمائید لطفا . با تشکر...
من یک فرم دارم که در اون یک دکمه وجود داره + progress bar و یک backgroundworker هم اضافه کردم به صفحه . کد های درون فرم به شکل زیر :
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Sub Doit()
Dim a As Integer = 0
Dim prog As Double = 100 / 5
Dim current As Integer = 0
For i As Integer = 0 To 5
System.Threading.Thread.Sleep(1000)
a += 1
BackgroundWorker1.ReportProgress(current)
current += prog
Next
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Doit()
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
MsgBox("completed")
End Sub
End Class
خوب این کدها مشکلی نداره با کلیک بروی دکمه progress bar شروع میکنه به پر شدن تا زمانی که تابع کارشو کامل انجام بده . اما مشکل از اونجایی شروع میشه که من یک کلاس ایجاد میکنم و تو اون تابع DoIT رو paste میکنم . و کمی تغییر . کد زیر :
Public Class Progress
Shared Sub Doit()
Dim a As Integer = 0
Dim prog As Double = 100 / 5
Dim current As Integer = 0
For i As Integer = 0 To 5
System.Threading.Thread.Sleep(1000)
a += 1
Form1.BackgroundWorker1.ReportProgress(current)
current += prog
Next
End Sub
End Class
همه کارها خوب انجام میشه اما تنها مشکلی که هست progressbar مقدار میگیره اما پر نیمشه ...
دوستان عزیز راهنمایی بفرمائید لطفا . با تشکر...