%
Dim LockObj As New Object
Public Sub PhaseChangedHandler(ByVal sender As Object, ByVal e As EventArguments.PhaseChangedEventArgs)
SyncLock LockObj
Select Case DirectCast(e, EventArguments.PhaseChangedEventArgs).Phase
Case DilemmaManager.Phase.PhaseX
TransColors(PrgMain.ForeColor, Color.DodgerBlue, PrgStatus)
Case DilemmaManager.Phase.Y, DilemmaManager.Phase.Z
TransColors(PrgMain.ForeColor, Color.DeepSkyBlue, PrgStatus)
Case DilemmaManager.Phase.D
TransColors(PrgMain.ForeColor, Color.DeepPink, PrgStatus)
End Select
End SyncLock
End Sub
'''
''' Apply transition effect to progress bar color.
'''
''' Color of the starting.
''' Color of the ending.
''' The progress bar.
Private Sub TransColors(ByVal startingColor As Color, ByVal endingColor As Color, ByVal progressBar As ToolStripProgressBar)
Dim R As Integer = startingColor.R
Dim B As Integer = startingColor.B
Dim G As Integer = startingColor.G
While Not (R = endingColor.R AndAlso B = endingColor.B AndAlso G = endingColor.G)
R = StepCloser(R, endingColor.R)
B = StepCloser(B, endingColor.B)
G = StepCloser(G, endingColor.G)
ChangeColor(Color.FromArgb(R, G, B), PrgStatus)
Threading.Thread.Sleep(1)
End While
End Sub
Const StepSpeed As Integer = 1
'''
''' One step increase or decrease first number to target number.
'''
''' The first number.
''' The target number.
''' New value of first number
Private Function StepCloser(ByVal firstNumber As Integer, ByVal targetNumber As Integer) As Integer
If firstNumber < targetNumber Then
firstNumber += StepSpeed
If firstNumber > targetNumber Then firstNumber = targetNumber
ElseIf firstNumber > targetNumber Then
firstNumber -= StepSpeed
If firstNumber < targetNumber Then firstNumber = targetNumber
End If
Return firstNumber
End Function
Private Delegate Sub DelegateChangeColor(ByVal Color As Color, ByVal progressBar As ToolStripProgressBar)
'''
''' Changes the progressbar color.
'''
''' The color.
''' The progress bar.
Private Sub ChangeColor(ByVal color As Color, ByVal progressBar As ToolStripProgressBar)
If InvokeRequired Then
Invoke(New DelegateChangeColor(AddressOf ChangeColor), color, progressBar)
Else
progressBar.ForeColor = color
End If
End Sub
%>