Мое приложение должно отображать время выполнения некоторых операций.Одно из времени обработки - это время, затрачиваемое на обновление времени обработки в пользовательском интерфейсе (понятно?: D).
Частота операций может варьироваться от 0 до 100 Гц (10 мс).
Время процесса отображается на некоторых этикетках.Для установки значений я использую этот статический метод:
public Class UserInteface
{
//Static action to SafeSetControlText
private static Action<Control, string> actionSetControlText = delegate(Control c, string txt) { c.Text = txt; };
//Control
//Set Text
public static void SafeSetControlText(Control control, string text, bool useInvoke = false)
{
//Should I use actionSetControlText or it is ok to create the delegate every time?
Action<Control, string> action = delegate(Control c, string txt) { c.Text = txt; };
if (control.InvokeRequired)
{
if (useInvoke)
control.Invoke(action, new object[] { control, text });
else
control.BeginInvoke(action, new object[] { control, text });
}
else
action(control, text);
}
}
Вопросы:
- Я не хочу останавливать все попытки пользовательского интерфейса для обновления времени процессаИтак, как я должен контролировать, когда это нормально, чтобы обновить?Сейчас я делаю что-то вроде: только обновление, если время последнего обновления было 100 мс до этого момента.
- Если я использую BegingInvoke, возможно ли переполнение очередей с слишком большим количеством вызовов?
- Как измерить время обновления пользовательского интерфейса с помощью BeginInvoke?Лучший способ использовать Invoke?