2013-03-13 41 views
0

首先,对不起我的英文。调度员没有制作新线程

我正在制作一个WPF/C#应用程序,带有一个Frame和pages。

当我尝试快速更改所显示的页面4或5次时,程序开始冻结,我需要等待。

我不得不使用Dispatcher使页面在后台加载,因此它们不会冻结整个应用程序。但仍然冻结。看起来调度员没有调用一个新的线程。

我用下面的代码:

this.Dispatcher.Invoke((Action)(() =>   // BeginInvoke also don't work 
{ 
    Page1 p = new Page1(); 
    Frame1.NavigationService.RemoveBackEntry(); 
    Frame1.Content = p; 
})); 

,仍然冻结!任何帮助?

非常感谢。

回答

3

我被迫使用调度,使网页在后台

那不是强迫他们在后台线程加载加载,它迫使他们调度的线程上加载。

+0

我正在调用调度程序,因为它不可能使一个简单的线程在UI上工作(http://stackoverflow.com/questions/9732709/the-calling-thread-cannot-access-this-object- because -a-不同的线程拥有-它)。那么,如何让我的应用程序在这种情况下不会冻结? – Guilherme 2013-03-13 19:43:09

+0

@Guilherme如果你的应用程序被冻结,那么你可能不仅仅是更新UI。你应该将你的工作分成修改UI和不修改的内容。在后台线程中执行没有更新UI的工作(从数据库获取数据,读取/写入文件,处理CPU等)。然后,当你完成所有这些工作时,请拿出结果并用它们更新UI。这就是所有基于UI的编程应该如何完成的。 – Servy 2013-03-13 19:45:15

+0

@Servy是的,但它是一个空白页面,没有内容,也没有代码。我不知道为什么它会冻结我的整个应用程序。那么,没有办法将页面的加载过程从UI中分离出来? – Guilherme 2013-03-13 19:50:07