2010-09-10 63 views

回答

0

AFAIK這隻適用於Freezable派生類。我看到的最佳解決方案是在UI線程上創建控件,並在創建過程中顯示進度條。爲了使這成爲可能,你將不得不創建控制部分,讓進度條稍微更新一次。這不僅是進度條所必需的,而且還會確保您的應用程序不會阻止。

僞代碼(以額外的線程execure):

this.Dispatcher.BeginInvoke(UpdateProgress(0)); 
this.Dispatcher.BeginInvoke(bigControlBuilder.Build(0,25)); 
this.Dispatcher.BeginInvoke(UpdateProgress(25)); 
this.Dispatcher.BeginInvoke(bigControlBuilder.Build(25,50)); 
this.Dispatcher.BeginInvoke(UpdateProgress(50)); 
this.Dispatcher.BeginInvoke(bigControlBuilder.Build(50,75)); 
this.Dispatcher.BeginInvoke(UpdateProgress(75)); 
this.Dispatcher.BeginInvoke(bigControlBuilder.Build(75,100)); 
this.Dispatcher.BeginInvoke(UpdateProgress(100)); 
this.Dispatcher.BeginInvoke(this.Children.Add(bigControlBuilder.GetControl())); 

更新:

爲了使複雜的控制更加敏感,你也可以嘗試UI,虛擬化/數據虛擬化:

僅加載和顯示當前對其他用戶可見的數據項目的可視項目。不要加載和顯示滾動到屏幕外的可視項目,以便看到或以任何其他方式對用戶不可見。在用戶交互卸載變得可視的項目時,加載變得可見的項目。

+0

只有在您控制正在構建的控件時纔有效。我們正在研究如何使商業Pivot控件更具響應性,或者至少受另一個線程控制。 – 2010-09-20 09:45:47

+0

不,上面的代碼也可以是您的數據透視控件的**部分**。將多個子項添加到Pivot(從綁定的數據)中。 – bitbonk 2010-09-20 16:28:04

+0

已經標記爲答案,我已經嘗試了很多黑客,似乎沒有任何工作。當子項目被添加時,樞軸控件不是我們要控制的。我們可以嘗試向區塊中的ItemSource枚舉中添加 – 2010-09-27 15:46:17

0

要回答你的問題,我想它是可能使用反射來設置_dispatcher,但我不會推薦它。 WPF中有一個根深蒂固的線程關聯和STA概念,所以我不會搞砸這個。

bitbonk的方法是一個很好的方法。 我們在我們的項目中使用的另一種方法是創建第二個UI線程,並在第一個UI線程構建UI時由第二個UI線程渲染進度指示器。只要進度條停留在第二個UI線程擁有的可視化樹中,就應該很好。

相關問題