Предположим, графический интерфейс (C #, WinForms), который выполняет работу и занят в течение нескольких секунд. У него все еще будут кнопки, которые должны оставаться доступными, метки, которые будут меняться, индикаторы выполнения и т. Д.
В настоящее время я использую этот подход для изменения графического интерфейса, когда занят:
//Generic delegates
private delegate void SetControlValue<T>(T newValue);
//...
public void SetStatusLabelMessage(string message)
{
if (StatusLabel.InvokeRequired)
StatusLabel.BeginInvoke(new SetControlValue<string>(SetStatusLabelMessage, object[] { message });
else
StatusLabel.Text = message;
}
Я использовал это, как будто оно выходит из моды, но я не совсем уверен, что это правильно. Создание делегата (и его повторное использование) делает все более чистым (по крайней мере, для меня), но я должен знать, что я не создаю монстра ...