110 lines
4.6 KiB
VB.net
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
|