2012-11-23 50 views
1

這是一個側面相關的問題這個問題其他: BackgroundWorker in Silverlight ViewModelUI凍結而不是顯示BusyIndi​​cator控件在Silverlight

我有一個TabControl當用戶選擇的菜單選項,其中我加載許多的TabItems。我通過將TabControl ItemsSource綁定到ObservableCollection來加載這個Tabs。當我爲這個集合添加一個新的TabItem時,它完美地顯示出來。

問題是我已經意識到,因爲用戶按下按鈕直到選項卡創建(ViewModel和視圖創建需要幾秒鐘),屏幕凍結。

我試圖在調用「loadTab」之前設置「IsBusy」,但它沒有顯示出來......我嘗試了幾乎所有的異步調用,但UI線程正在使用中,它會引發異常當我創建新的選項卡控件。

是否有任何騙局我失去了?有任何想法嗎???提前致謝。

回答

1

你見過這篇文章嗎?

http://www.dotnetspark.com/kb/3524-doesnt-your-girlfriend-deserves-more-time.aspx

它有助於當你避免重的東西在負載情況下,使可見= TRUE完成加載所有的資源,所以在這個意義上說,你避免誘惑,點擊一些用戶感覺不是後準備好了嗎。

不知道它是否有幫助,但這個想法呢?

public void DoStuff(Object values) 
{ 
//your values object could be anything, 
//they might even be some objects from your form 
//as long as you dont modify them in the other thread 
imgLoading.Visible=true; 
var client = new Proxy(); 
client.OnWorkCompletedAsync +=client_OnCompleted() ; 
client.Work(values); 
} 

void client_OnCompletedAsync(object sender, EventArgs e) 
{ 
    imgLoading.Visible=false; 
    //now you can update the UI with other stuff 
} 
+0

感謝您的回答。我在我的應用程序中使用WCF異步調用,但這是「本地調用」。創建View和ViewModel需要一點時間,同時屏幕會「凍結」。我想展示一個忙碌的指示器讓用戶知道發生了什麼。 – zapico

+0

我更新了一些代碼的答案,希望它有助於:) –

+0

我的意思是,你仍然可以使用另一個後臺線程來做繁重的工作(不僅在你調用服務時),在調用後臺線程後你可以提供一個有用的UI效果 –

相關問題