작업을 수행하고 몇 초 동안 바쁜 GUI (C#, WinForms)가 있다고 가정합니다.바쁜 GUI를 제어하는 모범 사례
//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;
}
봤는데 : 그것은 아직도 계속 액세스 할 필요가 버튼 등이 변경됩니다 라벨, 진행 바, 바쁜 때 GUI를 변경하는 것은 현재이 방법을 사용하고
이있을 것이다 스타일을 벗어나는 것처럼 이것을 사용하면, 아직 나는 이것이 적절하다는 것을 확신하지 못합니다. 델리게이트를 만들고 재사용하면 모든 것을 깨끗하게 처리 할 수 있지만 (적어도 나를 위해), 나는 몬스터를 만들지 않는다는 것을 알아야한다. ...
나는 프로그램에서 사용 된 BackgroundWorkers 및 다른 스레딩을 조율하는데 힘든 시간을 보냈습니다. 잘 여행 한 신사 프로그래머로서, 더 자주 볼 수 있습니까? BackgroundWorker 또는 Invoke를 통해 제어 하시겠습니까? – MPelletier
@MPelletier : 이런 종류의 작업을 수행하는 BackgroundWorker - 장기 실행 작업이 있으며 GUI 응답을 유지해야하며 진행률 표시 줄을 표시해야합니다. 바로 BackgroundWorker가 설계된 것입니다. –
"백그라운드 스레드에서 UI를 업데이트하는 가장 좋은 방법은 무엇입니까?" 이 대답은 그 질문을 실제로 다루지 않습니다. –