0
我有一個用戶控件,有一個列表視圖與gridview。 我正在使用後臺工作開始加載動畫,獲取數據並停止加載動畫。一切都很好,但問題出在我獲取數據並將其綁定到網格之後,在此期間渲染網格和加載動畫需要很長時間。wpf mvp listview與gridview長渲染時間
BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true };
public FormUserControl()
{
InitializeComponent();
presenter = new FormPresenter(this);
bw.DoWork += new DoWorkEventHandler(LoadInfo);
bw.RunWorkerCompleted += LoadInfo_RunWorkerCompleted;
Dispatcher.Invoke(new Action(() =>
{
EnableLoading(true);
}), DispatcherPriority.ContextIdle);
bw.RunWorkerAsync();
}
void LoadInfo(object sender, DoWorkEventArgs e)
{
presenter.LoadFormInformation();
}
private void LoadInfo_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
Dispatcher.Invoke(new Action(() =>
{
//here animation freezes
this.AjmStoreLog = this.GridInfo;
EnableLoading(false);
}), DispatcherPriority.ContextIdle);
}
我需要調用EnableLoading(false);此函數在網格渲染完成時不在LoadInfo_RunWorkerCompleted事件中。
感謝您的幫助。
謝謝我知道有沒有一種神奇的方式來做到這一點,據我所知,listview已經被虛擬化了,所以沒有運氣給我。我會在這裏回答,如果我能找到一個 – bugrasitemkar
然後,我建議在探查器下運行,並收集更多有關實際採取時間最長的信息;這可以爲您提供可以優化的線索。 Profiler通常會告訴你什麼是最能傷害性能的「熱門路徑」。 –
親愛的Alex,我閱讀了關於使用gridview在wpf listview中進行UI虛擬化的主題,相應地編輯了我的代碼並運行了一個分析器。我可以看到,即使listview面板正確虛擬化(沒有殺死虛擬化),仍然需要大量時間將數據加載到網格。從這裏可以看到https://imagebin.ca/v/3LPVTQ9sjn1o。我可以在4秒內加載網格面板,但我相信我需要的是在實際網格渲染完成時觸發一個事件,以避免過早加載動畫 – bugrasitemkar