WPF 应用程序冻结 Windows 7

7
我有一个在 Windows 7 64 位系统上运行的 .NET 3.5 WPF 应用程序。我遇到了奇怪的系统冻结问题,当拖动和移动主应用程序窗口时会发生这种情况。基本上整个系统会冻结(UI),应用程序停止渲染。使用任务管理器(CTRL+ALT+DEL)可以解除系统和应用程序的冻结状态。
该应用程序是一个交易应用程序,它在后台线程中处理大量消息。
有没有人遇到过这种类型的问题?特别是任务管理器解除冻结的奇怪现象。这种奇怪行为的原因是什么?
我几乎可以肯定它与将某些操作分派到 UI 线程有关。

是的,我有经验使用CTRL+ALT+DELETE解冻死机的系统。 - David Heffernan
收藏:哦啊...我现在正在开发这种WPF应用程序,我最不想看到的就是操作系统冻结。我对任何关于此问题的数据感兴趣(例如潜在的来源/解决方案)。 - paercebal
@David:在你的情况下,系统冻结的根本问题是什么? - Ender
你的问题只是询问是否有其他人经历过这种情况,而没有问为什么会发生!我倾向于在调试时注意到它,所以对于生产代码来说并不是真正的问题。 - David Heffernan
抱歉,我以为我已经明确表达了我在寻找原因。我在生产环境中也遇到了这个问题。 - Ender
4个回答

4

在 StackOverflow 上找到一些旧帖子,可能会有所帮助,据说这可能是由于字体缓存引起的问题。

"我遇到了同样的问题。那是一个损坏的字体缓存!

请查看 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7cc032c1-5f4d-4518-adc6-f53afd051e6b 获取解决方案。

"

WPF 应用程序挂起

这里是需要采取的步骤。

在 Windows 7 中:

1. Run services.msc
2. Stop Windows Presentation Foundation Font Cache 3.0.0.0 service
3. Delete FontCache3.0.0.0.dat 

 in XP: 
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data 

in Vista: %windir%\ServiceProfiles\LocalService\AppData\Local

4. Restart the machine

我知道的是,您可以执行以下操作。
Windows 操作系统有一个位于此处的字体缓存文件:C:\Windows\System32\FNTCACHE.DAT
删除此文件并重新启动系统即可。

3
问题是WCF服务死锁。类似于这个问题。
在处理消息的服务中,传入的消息必须以以下方式添加到集合中的UI线程。
Action action = new Action(() =>
            {
                lock (_messagesLock)
                {
                    _messages.Remove(message);
                }
            });
            _dispatcher.Invoke(DispatcherPriority.Normal, action);

更改

_dispatcher.Invoke(DispatcherPriority.Normal, action);

To

_dispatcher.BeginInvoke(DispatcherPriority.Normal, action);

解决了这个问题。

对于其他遇到此问题的人,你的死锁可能出现在任何地方。你需要在Visual Studio中打断所有操作,然后查看线程窗口并检查每个线程的堆栈,以找出哪些线程被卡住了以及原因。更详细的信息请参见:https://dev59.com/JHM_5IYBdhLWcg3w9oaG - Rick Velde

1

由于WPF使用DirectX,因此您还应确保DirectX和您的视频驱动程序是最新的并且正常工作。有问题的视频卡或视频驱动程序可能会导致WPF出现问题,而这些问题在其他Win32应用程序中可能不会表现出来。


0

如果您正在使用VS2010并在Win 7 64位上运行WPF应用程序,则解决问题的答案可能是这个:

通过更改视觉体验来提高性能

您可能会遇到VS2010中硬件加速的问题。我曾经因此而遇到了使用WPF构建的应用程序渲染问题。

试试这个:http://blogs.msdn.com/b/zainnab/archive/2010/06/22/improving-performance-by-changing-the-visual-experience-vstipenv0017.aspx

如果这不能解决您的问题,请转到您的显卡设置(nvidia或amd)并进行“重置设置”。然后再试一次。


此问题在VS2010和生产环境中(通过ClickOnce发布)都会出现。 - Ender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接