C# 调度程序没有生成新线程
首先,对不起我的英语 我正在制作一个WPF/C应用程序,带有框架和页面 当我尝试快速更改显示的页面时(4或5次),程序开始冻结,我需要等待 我被迫使用调度程序在后台加载页面,这样它们就不会冻结整个应用程序。但还是很冷。调度程序似乎没有调用新线程 我正在使用以下代码:C# 调度程序没有生成新线程,c#,wpf,multithreading,frame,dispatcher,C#,Wpf,Multithreading,Frame,Dispatcher,首先,对不起我的英语 我正在制作一个WPF/C应用程序,带有框架和页面 当我尝试快速更改显示的页面时(4或5次),程序开始冻结,我需要等待 我被迫使用调度程序在后台加载页面,这样它们就不会冻结整个应用程序。但还是很冷。调度程序似乎没有调用新线程 我正在使用以下代码: this.Dispatcher.Invoke((Action)(() => // BeginInvoke also don't work { Page1 p = new Page1(); Fra
this.Dispatcher.Invoke((Action)(() => // BeginInvoke also don't work
{
Page1 p = new Page1();
Frame1.NavigationService.RemoveBackEntry();
Frame1.Content = p;
}));
还冻着呢!有什么帮助吗
非常感谢
我被迫使用调度程序在后台加载页面
这并不是强迫他们在后台线程上加载,而是强迫他们在调度程序的线程上加载
我被迫使用调度程序在后台加载页面
这并不是强迫他们在后台线程上加载,而是强迫他们在调度程序的线程上加载。我调用调度程序是因为不可能让一个简单的线程在UI()上工作。那么,我如何才能使我的应用程序在这种情况下不冻结?@Guilherme如果你的应用程序冻结,那么你可能不仅仅是在更新UI。您应该将您的工作分为修改UI和不修改UI。在后台线程中执行不更新UI的工作(从数据库获取数据、读取/写入文件、在CPU上进行处理等)。然后,在完成所有这些之后,获取结果并用它们更新UI。所有基于用户界面的编程都应该这样做。@Servy是的,但这是一个空白页,没有内容,也没有代码。我不知道为什么它会冻结我的整个应用程序。嗯,没有办法将页面的加载过程与UI分开?@Guilherme没有一个神奇的按钮,你只需按下一次,就可以使所有UI代码在UI线程中运行,而所有非UI代码在后台线程中运行。您需要确定哪些代码在哪里运行,因为这不是一个可以自动化的问题。@Servy是的,我理解。我知道这不是小事,但没有代码可以放在后台。没有数据访问,没有加载页面。我没有代码落后,仍然冻结了很多。这个:“Frame1.Content=p;”需要大约1秒的时间来处理。我只想在后台使用这一行,我调用了一个调度程序,因为不可能让一个简单的线程在UI()上工作。那么,我如何才能使我的应用程序在这种情况下不冻结?@Guilherme如果你的应用程序冻结,那么你可能不仅仅是在更新UI。您应该将您的工作分为修改UI和不修改UI。在后台线程中执行不更新UI的工作(从数据库获取数据、读取/写入文件、在CPU上进行处理等)。然后,在完成所有这些之后,获取结果并用它们更新UI。所有基于用户界面的编程都应该这样做。@Servy是的,但这是一个空白页,没有内容,也没有代码。我不知道为什么它会冻结我的整个应用程序。嗯,没有办法将页面的加载过程与UI分开?@Guilherme没有一个神奇的按钮,你只需按下一次,就可以使所有UI代码在UI线程中运行,而所有非UI代码在后台线程中运行。您需要确定哪些代码在哪里运行,因为这不是一个可以自动化的问题。@Servy是的,我理解。我知道这不是小事,但没有代码可以放在后台。没有数据访问,没有加载页面。我没有代码落后,仍然冻结了很多。这个:“Frame1.Content=p;”需要大约1秒的时间来处理。我只想要这一行作为背景。