Eğer bir döngü içindeyken ekranda bir kaç değişiklik(Update,Refresh) yapmak istiyorsak(Progress Bar,Status Bar) bu oldukça kaynak tüketen birşeydir...
Örneğin :
pb.Value = 0
For Each temp As DataRow in tempTable.Rows
Dim tur as integer = Cint(temp.Item("TUR"))
Select Case Tur
'Case...
'Burda döngü içindeki işlerimiz
End Select
'şimdi progress Bar'ımızı Update edelim
pb.PerformStep()
pb.Refresh()
Applicaton.DoEvents()
Next
Yukarda kod her döngüye girdiğinde "Application.DoEvents()" ile kuyrukda bekleyen bütün mesajlar çağırılacaktır.Bu durumda ise sisteme ekstra bir yük binecektir.
Oysa WinAPI kullanarak bu yükü biraz azaltabiliriz.User32.dll de bulunan "GetQueueStatus" fonksiyonu bize yardımcı olacaktır.
Public Const QS_MOUSEBUTTON = &H4
Public Const QS_MOUSEMOVE = &H2
Public Const QS_MOUSE As Long = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
<system.runtime.interopservices.dllimport(>"user32.dll")> _
Public Shared Function GetQueueStatus(ByVal qsFlags As Integer) As Integer
End Function
Public Sub YeniDoEvents()
If GetQueueStatus(QS_MOUSE) <> 0 Then
'Eğer Fare Sürüklenmiş veya Tıklanmışsa
Application.DoEvents()
End If
End Sub
'....
'....
'....
pb.Value = 0
For Each temp As DataRow in tempTable.Rows
Dim tur as integer = Cint(temp.Item("TUR"))
Select Case Tur
'Case...
'Burda döngü içindeki işlerimiz
End Select
'şimdi progress Bar'ımızı Update edelim
pb.PerformStep()
pb.Refresh()
'Şimdi Kendi DoEvents()'imizi çağırıyoruz
YeniDoEvents()
Next