在客户处,我们的一个WPF应用程序开始挂起。当尝试用最小的工作示例重现问题时,我发现即使是最基本的(非平凡的)WPF应用程序也会挂在该机器上。
示例A :在Visual Studio 2008中创建一个新的C#WPF项目。不做任何更改,编译它并在客户的计算机上运行它。它会运行。
示例B :以示例A为例,将TextBlock添加到主窗体Window1
:
<Window ...>
<Grid>
<TextBlock>Test</TextBlock>
</Grid>
</Window>
编译应用程序并在客户的计算机上运行它。它将挂起:标题栏和窗口边框是可见的,内部是透明的,窗口不会对任何东西做出反应(无法移动或关闭)。必须使用任务管理器关闭应用程序。
显然,该客户的WPF已被破坏。这是一个已知的问题,即之前是否有人遇到它并且已经知道如何解决它(例如重新安装.net 3.5 SP1等)?
开发机器是W7SP1,客户的机器是XP(可能是SP3,没有检查)。
答案 0 :(得分:5)
结帐Tom Dudfield's instructions to clear the WPF font cache。对于几个用户来说,这对我有用。
答案 1 :(得分:0)
另外,我最近有一个更复杂的例子。
<强>挥舞:强>
我试过这个清理字体缓存的东西,它对我的悬挂应用程序没有任何作用,但是YMMV。然而它似乎无害。
还尝试了NGEN的所有框架内容,但这并没有解决问题。
<强> SOLUTION:强>
在我的MVVM应用程序中,我在标签页上删除的复杂控件上有一个ItemsControl(通用,而不是真正的ListBox)。 ItemsControl提供了大约14个'数据行',这些数据行由绑定到一个小集合的自定义控件组成,该集合本身被ScrollViewer包围。随着ScrollViewer的出现,选定的计算机将无休止地肆虐并陷入困境。评论Xaml使得应用程序表现得非常好,几乎排除了支持ViewModel中的问题。
删除周围的ScrollViewer消除了这个问题,无论如何它都不是必需的。我确实怀疑真正的问题潜伏在某个地方,但坦率地说没有时间或耐心进一步调查......
片段
<!--<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True" Grid.Row="7" -->
<ItemsControl Grid.Row="7"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Name="FileSettingsList"
ItemsSource="{Binding MigratorFiles.FilesCollection}"
BorderThickness="2"
HorizontalContentAlignment="Left"
Template="{StaticResource FileNameSettingsItemsControlTemplate}"
ItemsPanel="{StaticResource FileNameSettingsItemsPanelTemplate}"
ItemTemplate="{StaticResource FileNameSettingsItemDataTemplate}" >
</ItemsControl>
<!-- /ScrollViewer -->