WPF应用程序冻结了Windows 7

时间:2011-08-30 20:37:41

标签: c# .net wpf multithreading

我在Windows 7 64bit上有.NET 3.5 WPF个应用程序。我遇到拖动和移动主应用程序窗口时发生的奇怪的系统冻结问题。基本上整个系统冻结(UI),应用程序停止渲染。 启动任务管理器( CTRL + ALT + DEL )解冻系统和应用程序。

应用程序本身是一个交易应用程序,它在后台线程中处理大量消息。

有没有人遇到过这类问题?特别是任务管理器解锁冻结的奇怪之处。这种奇怪行为的原因是什么?

我几乎可以肯定它与将某些操作分派给UI线程有关。

4 个答案:

答案 0 :(得分:4)

在StackOverflow上发现了一些可能有帮助的老帖子,据说这可能是由于字体缓存造成的。

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

请参阅http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7cc032c1-5f4d-4518-adc6-f53afd051e6b了解解决方案。

WPF Application Hang

以下是要求采取的步骤。

在Win 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

删除此文件,然后重新启动系统。

答案 1 :(得分:3)

问题是WCF服务死锁。类似于this

的问题

在处理消息的服务中,必须以下列方式将传入消息添加到UI线程上。

Action action = new Action(() =>
            {
                lock (_messagesLock)
                {
                    _messages.Remove(message);
                }
            });
            _dispatcher.Invoke(DispatcherPriority.Normal, action);

更改

_dispatcher.Invoke(DispatcherPriority.Normal, action);

_dispatcher.BeginInvoke(DispatcherPriority.Normal, action);

解决了这个问题。

答案 2 :(得分:1)

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

答案 3 :(得分: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)并执行“重置设置”。然后再试一次。