Я пытаюсь создать класс индикатора выполнения, как показано ниже.Если оставшееся время ребенка больше, чем оставшееся время родителей, тогда родители должны равняться оставшемуся времени ребенка.
В методе CalcETA () ниже я испытываю трудности с доступом к свойствам ребенка.Я подумала, что если я знаю, что за элемент списка №, я могу каким-то образом получить доступ к значениям ProgressBarList [myIndex + 1] ...
public class ProgressBars
//NOTE: Not working yet
// used to keep track of multiple progress bars and the time remaining.
// recommended to set as default: Min = 1, Max = 100, Step = 1, Value = 1 in progress bar property control.
{
public List<ProgressBarItem> ProgressBarList;
public bool Started { get; set; } // set to true if you want to keep track of when to update bars on form.
public string Status { get; set; } // general text
public class ProgressBarItem
{
public bool HasChild { get; set; } // if HasChild = True then parent TimeRemaining must not be less than childs.
public int Maximum { get; set; }
public int Value { get; set; }
public string Text { get; set; }
public DateTime StartTime { get; set; }
public TimeSpan TimeRemaining { get { return CalcETA(HasChild, StartTime, Value, Maximum); } }
public TimeSpan ElapsedTime { get { return DateTime.Now - StartTime; } }
}
private static TimeSpan CalcETA(bool HasChild, DateTime StartTime, int counter, int counterGoal)
{ // Calculate the time remaining for the process
if (HasChild)
{
//TODO: How do I get the child's StartTime?
TimeSpan timeElapsed = DateTime.Now - StartTime;
return GetETAFromTimeElapsed(timeElapsed, counter, counterGoal);
}
else
{
TimeSpan timeElapsed = DateTime.Now - StartTime;
return GetETAFromTimeElapsed(timeElapsed, counter, counterGoal);
}
}
private static TimeSpan GetETAFromTimeElapsed(TimeSpan ts, int Counter, int CounterMax)
{
if (Counter != 0) // do not divide by zero
{
double minLeft = (ts.TotalMinutes / Counter) * (CounterMax - Counter);
return TimeSpan.FromMinutes(minLeft);
}
else
return default(TimeSpan);
}
ОБНОВЛЕНИЕ 1:
Примечание Вопрос должен гласить: если класс содержит список пользовательских классов, как я могу получить класс List Item # при работе со свойством get элемента списка?
Похоже, мне нужно искать вложенные классыСпасибо за срок.Может быть, это яснее: Проблема: у дочернего индикатора выполнения есть оставшееся время (ETA) 5 минут.Родительский индикатор выполнения имеет ETA 2 минуты, что вводит в заблуждение.Поэтому установите родительский индикатор выполнения также на 5 минут.
- Каждый индикатор выполнения является классом в списке.т. е.
List<MyProgressBar>
- Каждый индикатор выполнения должен рассчитывать ETA.
- При расчете ETA для любого индикатора выполнения проверьте, есть ли у него индикатор выполнения дочернего элемента и если текущее ETA <дочернее ETA, используйте ETA дочернего элемента.. </li>
- Я предполагаю, что каждый элемент, добавленный в список, является дочерним по отношению к вышеуказанному.(возможно, неверное предположение)
- Поскольку каждый индикатор выполнения является элементом списка, как: a) можно ли получить текущий индексный номер списка внутри методов класса?т.е. список [номер].б) Могу ли я получить доступ к другим значениям элемента списка (например, дочернему звездному времени)?т.е. List [childnum].
Мысли: 1. Поскольку я делал перерыв, я думал, что могу переопределить метод List.Add (), чтобы вставить элемент #?Но тогда я должен сохранить это значение.