我在Windows 7 64bit上有.NET 3.5 WPF
个应用程序。我遇到拖动和移动主应用程序窗口时发生的奇怪的系统冻结问题。基本上整个系统冻结(UI),应用程序停止渲染。
启动任务管理器( CTRL + ALT + DEL )解冻系统和应用程序。
应用程序本身是一个交易应用程序,它在后台线程中处理大量消息。
有没有人遇到过这类问题?特别是任务管理器解锁冻结的奇怪之处。这种奇怪行为的原因是什么?
我几乎可以肯定它与将某些操作分派给UI线程有关。
答案 0 :(得分:4)
在StackOverflow上发现了一些可能有帮助的老帖子,据说这可能是由于字体缓存造成的。
“我遇到了同样的问题。这是一个损坏的字体缓存!!
请参阅http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7cc032c1-5f4d-4518-adc6-f53afd051e6b了解解决方案。
“
以下是要求采取的步骤。
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构建的应用程序时遇到了问题。
如果这不能解决您的问题,请转到您的视频卡设置(nvidia或amd)并执行“重置设置”。然后再试一次。