1

데이터를 가져올 때 백그라운드 작업자에서 실행중인 SQLDataReader에서 가져 오는 데이터로로드하려는 DataGridView가 있습니다. 오랜 시간이 걸리는 쿼리).VB.NET DataGridView는 백그라운드 작업자와 SQLDataReader의 데이터를로드합니다.

내 목표는 사용자 경험이 Windows에서 검색 결과가 나와있는 목록에 나타나고 여전히 창과 상호 작용할 수있는 파일을 검색하는 것과 유사하다는 것입니다.

배경 작업자와 데이터 판독기로 작업하고 BackgroundWorker.ReportProgress 메서드를 사용하여 SQLDataReader.Read를 통해 행을 추가하려고합니다. 모든 기술적으로 작동하지만 깜박임 미친 및 양식을 사용할 수 없습니다 (GUI 스레드가 차단 된 때문이 아니라 너무 많은 일이 있기 때문에 그냥 ...)

어떤 아이디어? DataGridview를 "부드럽게"로드하려면 어떻게해야합니까?

답변

0

ReportProgress이 호출되는 속도를 조절하고 싶을 것입니다. 각 행에 대해 호출하지 마십시오. 대신 여러 행을 대기열에 넣은 다음 ReportProgress을 호출하십시오. ProgressChanged 이벤트가 2 초마다 발생하도록 조정하십시오.

정직하게도, 이것은 내가 BackgroundWorker이 나쁜 디자인을 강요하는 것을 알 수있는 시나리오입니다. 내가 수행 할 작업은 BackgroundWorker을 모두 포기하고 수동으로 새로운 Thread 또는 Task을 새로 작성하여로드하는 것입니다. 작업자 스레드가 행을 Queue<T> 또는 다른 데이터 구조로 큐에 넣은 다음 UI 스레드가 주기적으로 System.Windows.Form.Timer을 통해이 대기열을 폴링하도록하십시오. UI 스레드는 합리적인 수의 행을 추출하여 그리드에 배치하여 너무 많은 작업을 시도하지 않고 UI를 중단하거나 너무 오래 걸릴 수 없습니다.

관련 문제