private void ScanBDROMProgress(object state)
{
ScanBDROMState currentScanState = (ScanBDROMState)state;
try
{
long finishedBytes = currentScanState.FinishedBytes;
if (currentScanState.StreamFile != null)
{
finishedBytes += currentScanState.StreamFile.Size;
}
double progress = ((double)finishedBytes / currentScanState.TotalBytes);
int progressValue = (int)Math.Round(progress * 100);
if (progressValue < 0) progressValue = 0;
if (progressValue > 100) progressValue = 100;
TimeSpan elapsedTime = DateTime.Now.Subtract(currentScanState.TimeStarted);
TimeSpan remainingTime;
if (progress > 0 && progress < 1)
{
remainingTime = new TimeSpan(
(long)((double)elapsedTime.Ticks / progress) - elapsedTime.Ticks);
}
else
{
remainingTime = new TimeSpan(0);
}
String elapsedTimeString = string.Format(
"{0:D2}:{1:D2}:{2:D2}",
elapsedTime.Hours,
elapsedTime.Minutes,
elapsedTime.Seconds);
String remainingTimeString = string.Format(
"{0:D2}:{1:D2}:{2:D2}",
remainingTime.Hours,
remainingTime.Minutes,
remainingTime.Seconds);
if (currentScanState.StreamFile != null)
{
System.Console.Write("Scanning {0,3:d}% - {1,10} {2,12} | {3}\r", progressValue, currentScanState.StreamFile.DisplayName, elapsedTimeString, remainingTimeString);
}
else
{
System.Console.Write("Scanning {0,3}% - \t{2,10} | {3}...\r", currentScanState.StreamFile.DisplayName);
}
}
catch { }
}