1

好吧,我有一個DataGridView,我想加載數據,我從後臺工作人員運行的SQLDataReader中檢索數據(它是一個需要很長時間的查詢)。VB.NET DataGridView加載來自後臺工作者和SQLDataReader的數據

我的目標是讓用戶體驗類似於在Windows中搜索文件,當結果出現在列表中時,結果將顯示在列表中,您仍然可以與窗口進行交互。

我讓它與後臺工作者和數據讀取器一起工作,我試圖通過使用BackgroundWorker.ReportProgress方法從SQLDataReader.Read添加行。一切技術上的作品,但閃爍是瘋狂的,形式是無法使用的(可能不是因爲GUI線程被阻止,只是因爲有這麼多的事情......)

任何想法?我如何使datagridview「平滑」加載?

回答

0

您將要調節調用ReportProgress的速率。不要爲每一行調用它。相反,排隊幾行,然後撥打ReportProgress。調整它,以便ProgressChanged事件每兩秒鐘提高一次。

老實說,這是一個場景,我發現BackgroundWorker迫使你成爲一個糟糕的設計。我要做的就是放棄BackgroundWorker並手動創建一個新的ThreadTask來完成加載。讓您的工作線程將行排入Queue<T>或其他一些數據結構中,然後讓您的UI線程通過System.Windows.Form.Timer定期輪詢該隊列,在任何時間間隔內最適合您。 UI線程將提取合理數量的行並將它們放置在網格中,它不會嘗試做太多並掛起UI,或者太長而無法使用。