Files
2017-03-26 20:00:03 +02:00

110 lines
4.6 KiB
VB.net

Imports DevExpress.XtraSplashScreen
Imports System.Threading
Public Class WaitFormClass
Private _WaitForm_Minimum As Long = -1
Private _WaitForm_Maximum As Long = -1
Private _WaitForm_Step As Long = -1
Private _Current_Step As Long = -1
Private _Current_Percent As Double = 0
Private _Last_Percent As Double = 0
Private _Act_Displayed_Time As Date
Private _Prev_Displayed_Time As Date
Private _StartTime As Date
Private _Caption As String
Private _DoThread As Boolean = False
Private _ThreadHandler As Thread
Public Property Caption
Get
Return _Caption
End Get
Set(value)
_Caption = value
End Set
End Property
Public Sub Initwork(ByVal _Minimum As Long, ByVal _Step As Long, ByVal _Maximum As Long)
_WaitForm_Minimum = _Minimum
_WaitForm_Maximum = _Maximum
_WaitForm_Step = _Step
_Current_Step = 0
_Current_Percent = 0
_Last_Percent = 0
_Act_Displayed_Time = Now
_Prev_Displayed_Time = Date.MinValue
_StartTime = Now
SplashScreenManager.ShowForm(Nothing, GetType(WaitForm), True, False, False)
System.Windows.Forms.Application.DoEvents()
_DoThread = True
_ThreadHandler = New Thread(AddressOf ThreadTask)
_ThreadHandler.IsBackground = True
_ThreadHandler.Start()
End Sub
Public Sub DoWork()
Dim _EstimatedSec As Long = 0
Dim _SpentSec As Long = 0
_Current_Step += _WaitForm_Step
_Current_Percent = Math.Round(_Current_Step / _WaitForm_Maximum * 100, 0, MidpointRounding.AwayFromZero)
If _Last_Percent <> _Current_Percent Then
Try
If Caption = "" Then
SplashScreenManager.Default.SetWaitFormCaption(String.Format("Kérem várjon, dolgozom ... {0}", Format(_StartTime, "hh:mm:ss")))
Else
SplashScreenManager.Default.SetWaitFormCaption(Me.Caption)
End If
_SpentSec = DateDiff(DateInterval.Second, _StartTime, Now)
_EstimatedSec = ((_SpentSec / _Current_Step) * (_WaitForm_Maximum - _Current_Step)) + 1
Dim iSpan As TimeSpan = TimeSpan.FromSeconds(_EstimatedSec)
SplashScreenManager.Default.SetWaitFormDescription(String.Format("{0}% ,{1}/{2}, eltelt idő: {3}, becsült hátralévő : {4}:{5}:{6}",
_Current_Percent, _Current_Step, _WaitForm_Maximum, FormatEllapsedTime(),
iSpan.Hours.ToString, iSpan.Minutes.ToString, iSpan.Seconds.ToString))
Catch ex As Exception
End Try
_Last_Percent = _Current_Percent
End If
System.Windows.Forms.Application.DoEvents()
End Sub
Public Sub FinalWork()
_DoThread = False
_ThreadHandler = Nothing
SplashScreenManager.CloseForm(False)
System.Windows.Forms.Application.DoEvents()
End Sub
Private Function FormatEllapsedTime() As String
Dim iSpan As TimeSpan = TimeSpan.FromSeconds(DateDiff(DateInterval.Second, _StartTime, Now).ToString)
Return String.Format("{0}:{1}:{2}", iSpan.Hours.ToString, iSpan.Minutes.ToString, iSpan.Seconds.ToString)
End Function
'// THREADING
Private Sub ThreadTask()
Dim _EstimatedSec As Long = 0
Dim _SpentSec As Long = 0
While _DoThread
_Act_Displayed_Time = Now
Try
If _Act_Displayed_Time <> _Prev_Displayed_Time Then
If DateDiff(DateInterval.Second, _Prev_Displayed_Time, _Act_Displayed_Time) >= 1 Then
_SpentSec = DateDiff(DateInterval.Second, _StartTime, Now)
_EstimatedSec = ((_SpentSec / _Current_Step) * (_WaitForm_Maximum - _Current_Step)) + 1
Dim iSpan As TimeSpan = TimeSpan.FromSeconds(_EstimatedSec)
SplashScreenManager.Default.SetWaitFormDescription(String.Format("{0}% ,{1}/{2}, eltelt idő: {3}, becsült hátralévő : {4}:{5}:{6}",
_Current_Percent, _Current_Step, _WaitForm_Maximum, FormatEllapsedTime(),
iSpan.Hours.ToString, iSpan.Minutes.ToString, iSpan.Seconds.ToString))
_Prev_Displayed_Time = Now
End If
End If
Catch ex As Exception
End Try
Thread.Sleep(1000)
End While
End Sub
End Class