以下是该方案:
1:我们的WPF应用程序启动
2:WPF应用程序加载各种用户控件,包括一些在WPF 4中使用新BitmapCache
功能的用户控件
3:点击ctrl-alt-delete或win + l或加载另一个需要UAC的应用程序
4:取消那些东西
WPF应用程序现在没有响应,但它是WPF本身就是问题。所有后台线程上的所有应用程序逻辑都很好,您可以通过按alt + f4等进行交互,但屏幕永远不会重绘
注意事项:
BitmapCache
d个元素,它就不会锁定帮助!!
答案 0 :(得分:0)
PROFIT!
:)
答案 1 :(得分:0)
经过艰苦的努力,一位同事终于成功地追踪了这一点。
我们的应用程序最初显示一个登录窗口,然后将其关闭,并显示一个主窗口。我们很久以前发现,如果你这样做,WPF假定第一个窗口(登录窗口)是应用程序的主窗口,因此它在关闭时关闭。
为了缓解这种情况,我们在任何其他窗口之前创建了一个虚假的屏幕外窗口(从未显示过)。 WPF然后假设这个假窗口是主窗口 - 它永远不会关闭,所以我们的应用程序可以按照需要工作。
作为参考,假窗口如下所示:
m_mainWindow = new Window { Left = int.MaxValue, Top = int.MaxValue, Width = 1, Height = 1 };
m_mainWindow.ShowInTaskbar = false;
这一切都很好。一段时间后,另一位开发人员向Show
和Hide
这个假窗口添加了一些代码。
显示主窗口是导致它的原因。
这是一个完整的复制品:
答:在visual studio中制作一个新的WPF应用程序
B:将以下代码放入App
App.xaml.cs
班级
public partial class App : Application
{
Window m_mainWindow;
public App()
{
m_mainWindow = new Window { Left = int.MaxValue, Top = int.MaxValue, Width = 1, Height = 1 };
m_mainWindow.ShowInTaskbar = false;
// Comment this line out and the problem goes away
m_mainWindow.Show();
}
}
C:在BitmapCached
中至少放置一个MainWindow.xaml
元素。这是我的
<Window x:Class="LockupRepro.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid CacheMode="BitmapCache">
<Button Content="Look a button" />
</Grid>
</Window>
您会看到该应用似乎已锁定,如问题中所述 - 注释掉m_mainWindow.Show修复它。
经过一些进一步的调查后,它不是只是显示窗口,而是ShowInTaskBar
设置为false的事实。如果我们不设置,那么显示窗口不再导致问题。
奇妙!