단추를 누를 때 결과 집합을 반복하고이 결과 집합에 대한 작업을 수행하는 간단한 프로그램이 있습니다 (DataTable
에 저장 됨). 루프 중에 RichTextBox
, 2 개의 레이블 및 ToolStripStatusLabel
의 텍스트를 업데이트합니다. 이것들은 루프 동안 리프레시되지 않으므로 각 아이템이 루프에서 처리 된 후에 this.Refresh()
을 수행합니다. 프로그램에서 아무 것도 클릭하지 않으면 작동하지 않습니다. 응답이 없으며 foreach
루프가 완료 될 때까지는 아무 것도 새로 고쳐지지 않습니다..NET Windows Forms 새로 고침 제어
private void myBtn_Click(object sender, EventArgs e)
{
// Query database and store results in DataTable dt.
foreach (DataRow dr in dt.Rows)
{
// Process row data.
// Update RichTextBox, labels, and ToolStripStatusLabel.
this.Refresh();
}
}
여기에 문제가 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 이것은 C#을 사용하는 Windows Forms 응용 프로그램입니다.
이 논리를 백그라운드 스레드로 옮기면 그 스레드에서도 잠그지 않을 것입니까? 아니면 배경 스레드에서 메인 스레드에서 this.Refresh를 호출할까요? –
백그라운드 스레드가 사용 중이지만 GUI에 영향을 미치지 않습니다 (프로그램은 계속 실행됩니다). 백그라운드 스레드에서 GUI를 변경하려면 Invoke (또는 BeginInvoke)를 사용해야합니다. –
백그라운드 작업자에서이 논리를 처리하고 대리인/호출로 UI를 업데이트하여 정상적으로 작동합니다. 감사합니다 –