1

这是另一个问题的相关问题: BackgroundWorker in Silverlight ViewModel

我有一个 TabControl,当用户选择菜单选项时,我会在其中加载许多 TabItem。我通过将 TabControl ItemsSource 绑定到 ObservableCollection 来加载此选项卡。当我向此集合添加新的 TabItem 时,它会完美显示。

问题是我已经意识到,由于用户按下按钮直到创建选项卡(ViewModel 和 View 创建需要几秒钟),屏幕被冻结。

我尝试在调用“loadTab”之前设置“IsBusy”,但它没有显示出来……我已经尝试了几乎所有异步调用的方法,但是 UI 线程正在使用中,当我创建新的选项卡控件。

有什么技巧我输了吗???有任何想法吗???提前致谢。

4

1 回答 1

1

你看过这个帖子吗?

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

当您避免加载事件中的繁重内容并在完成加载所有资源后使 Visible=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
}
于 2012-11-23T13:17:02.433 回答