我在datagrid視圖中加載了一些數據(1,200,000行),並且該應用程序需要花費太多時間才能加載並且有時會凍結。將數據異步加載到數據網格中
我不知道如何異步加載它們? (可能有progressBar)。
我可以在這裏找到一些幫助嗎?
我在datagrid視圖中加載了一些數據(1,200,000行),並且該應用程序需要花費太多時間才能加載並且有時會凍結。將數據異步加載到數據網格中
我不知道如何異步加載它們? (可能有progressBar)。
我可以在這裏找到一些幫助嗎?
將數據加載分解爲更小的數據塊,例如每次處理100到1000行。如果WPF網格將數據綁定到數據集合,並且集合是可觀察集合(實現INotifyCollectionChanged),那麼當新數據添加到集合時,WPF將自動更新顯示。
您還應該考慮將虛擬化列表控件或網格與分頁數據源結合使用,以便只載入當前顯示在屏幕上的數據(而不是內存中的120萬行數據)。這將爲您執行「分塊」,並使您能夠基本上向用戶呈現無限量的數據,而只需很少的內存使用或網絡延遲。
退房這對異步檢索數據的虛擬列表框SO文章:How do I populate a ListView in virtual mode asynchronously?
我在我做的非常相似的使用線程的東西的應用程序。這段代碼應該在代碼後臺運行時一次更新你的datagrid。
using System.Windows.Threading;
private void Run()
{
try
{
var t = new Thread(Read) { IsBackground = true };
t.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Read()
{
foreach (/* whatever you are looping through */)
{
/* I recommend creating a class for the result use that for the
datagrid filling. */
var sr = new ResultClass()
/* do all you code to generate your results */
Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)(() => dgResults.AddItem(sr)));
}
}