РЕДАКТИРОВАТЬ: см. Комментарии для обсуждения всей публикации против немедленной отправки малярии.
В любом случае, мой ответ на самом деле один и тот же: если только это не происходит в огромной степени часто без необходимости (то есть большую часть времени вы находитесь в потоке пользовательского интерфейса, и он привязан к чему-то вроде обработчик движения мыши) я бы не переживал. Это, безусловно, делает код проще. Если это будет вызываться очень часто, я бы измерил и протестировал больше:)
Invoke
быстрее с делегатом EventHandler
или MethodInvoker
, чем с другими. Я не знаю, есть ли какая-то разница между ними - вы можете проверить.
Вы можете сделать это еще проще, написав метод расширения, например,
public static void InvokeHandler(this Control control, MethodInvoker handler)
{
control.Invoke(handler);
}
Тогда вы можете сделать свой код:
private void SetStatus(string statusMessage)
{
this.InvokeHandler(delegate
{
resultLabel.Text = statusMessage;
});
}
или
private void SetStatus(string statusMessage)
{
InvokeHandler(() => resultLabel.Text = statusMessage);
}
Таким образом, вам не нужно указывать тип делегата.