2015-02-11 91 views
3

我最近在安装.Net 4.5.2的Windows 7 32位操作系统上遇到了一个问题。我有一个应用程序是Winforms并打开一个模式WPF窗口。但是,因为我们安装了.Net Framework 4.5.2,所以这些窗口无法正常打开,一旦窗口调用.ShowDialog()需要大约15-20秒(鼠标转向指针几秒钟,winforms窗口变得无响应),然后我们会收到以下异常:从WinForms应用程序(.Net 4.5.2/Win 7/32 Bit)打开WPF窗口

enter image description here System.ComponentModel.Win32Exception(0x80004005的):没有足够配额可用来处理该命令

奇怪的是,一旦这种异常被抛出,我选择“继续”,下次我尝试打开窗口时,它会立即打开并且不会抛出异常。

以下是我用来打开窗口的简化版本。 (当我运行该代码时,应用程序不会抛出异常,但它确实挂了15-20秒)

private void OpenWpfWindow(object sender, EventArgs e) 
    { 
     WPFWindow testWindow = new WPFWindow(); 

     testWindow.Visibility = System.Windows.Visibility.Visible; 
     testWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 

     System.Windows.Interop.WindowInteropHelper helper = new System.Windows.Interop.WindowInteropHelper(testWindow); 
     helper.Owner = System.Windows.Forms.Application.OpenForms[0].Handle; 

     testWindow.ShowDialog(); 
    } 

我们没有遇到此问题与Windows 7,并与安装了.NET 4.5

+0

会出现这种情况,如果你调用Show(),而不是ShowDialog的()? – 2015-02-11 22:11:17

+0

我有Windows 8的64位.NET 4.5.2,VS2013更新4,该代码运行良好。我将Winforms应用程序设置为x86,它仍然工作。具体来说:我创建了一个新的Winforms应用程序,新的WPF应用程序,将Winforms的引用添加到WPF应用程序+ PresentationBase等等。新建按钮,单击事件指向您的OpenWpfWindow函数。运行应用程序,单击按钮,出现WPF窗口。花了大约5秒钟才出现。 – 2015-02-11 22:23:01

+1

在MSDN论坛上有一连串帖子似乎暗示显示窗口可能会填充消息队列。从以下链接开始:https://social.msdn.microsoft.com/Forums/vstudio/en-US/6e94283a-76be-42b3-98e6-a8e18c4e43de/invisible-wpf-dialog-filling-up-windows- message-queue?forum = wpf – 2015-02-11 22:26:08

回答

2

这个问题在.NET 4.5.2(在Windows 7中)中是关于触摸设备初始化的问题,并且有一个来自Microsoft的修补程序解决方案。

即使没有触摸设备存在,WPF应用程序也会启动Windows Touch输入服务(wisptis.exe),从而导致延迟,同时消息队列被淹没并且WPF窗口创建失败。

的修补程序可以在这里找到: https://support.microsoft.com/en-us/kb/3026376/