WPF调度程序 - 突然“卡住”,在我按下键之前不处理任何操作

6
我们在WPF应用程序中遇到了一个非常奇怪的问题。
启动时,我们的应用程序会触发一些服务请求。然后当窗口被加载时,直到我们按下一个键之前,它都无响应,CPU使用率为0%。
看起来像是UI死锁,尽管不是真正的死锁-我们可以调整大小和移动窗口。当附加调试器时,我们可以看到主线程在Win32.UnsafeNativeMethods.GetMessageW上-它没有等待锁,正如您通常在此类问题中看到的那样。
如果我们按下一个键,它就会继续处理我们传递给Dispatcher.BeginInvoke的操作。
这在调试和发布版本上都发生,但只有在使用MSBuild工具构建时才会出现。如果我在我的PC上构建应用程序,包括VS2010和VS2012-都针对.NET 4.0-该问题永远不会发生。
有什么想法可以确定是什么阻止了Dispatcher在按下键之前执行操作吗?
此致。
P.S-请参见以下UI线程堆栈跟踪。
WindowsBase.dll!MS.Win32.UnsafeNativeMethods.GetMessageW(ref System.Windows.Interop.MSG msg,System.Runtime.InteropServices.HandleRef hWnd,int uMsgFilterMin,int uMsgFilterMax)+ 0x14字节 WindowsBase.dll!System.Windows.Threading.Dispatcher.GetMessage(ref System.Windows.Interop.MSG msg,System.IntPtr hwnd,int minMessage,int maxMessage)+ 0x80字节 WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame)+ 0x75字节 WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame)+ 0x49字节 WindowsBase.dll!System.Windows.Threading.Dispatcher.Run()+ 0x4b字节 PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore)+ 0x17字节 PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window)+ 0x6f字节 PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window)+ 0x26字节 PresentationFramework.dll!System.Windows.Application.Run()+ 0x1b字节 MyApp.App.Main()第50行+ 0xa字节

我已经进行了进一步的挖掘 - 看起来与Component One许可证有关。构建脚本会将其清空,因为构建服务器上没有安装许可证。因此,如果我在本地将其清空,则会遇到相同的问题。如果我不这样做,则可以正常工作。因此,看起来我需要修复我的本地C1许可证。我不理解的是为什么我没有看到许可证弹出窗口,而是出现了这个尴尬的冻结问题。 - Alberto
1个回答

1
这可能是由于 .Net 4.0 中的可能错误导致的,但这只是一个猜测。它在 .Net 4.5 中得到了解决。你是否在 Jenkins 构建机器上进行测试并编译?
我遇到过一些类似的问题(在开发和构建机器上都可以编译,但在测试机器上出现核心框架的运行时异常,而在开发机器上没有出现)。
在这些情况下,问题的根源在于,虽然目标是 .Net 4.0,但是在安装 .Net 4.5/4.5.1(作为 VS2012 的一部分)时,.Net 4.0 的程序集被覆盖了,因此,尽管源代码相同,但行为已经改变,因此,在具有 VS2012 的机器上似乎一切正常,但在仅具有 VS2010 和/或仅具有 .Net 4.0 的机器上不正常。
作为建议,尝试使用 VS2012 进行构建(仍以 .Net 4.0 为目标),然后在仅安装了 .Net 4.0 的机器上运行输出应用程序,再在安装了 .Net 4.5 的机器上运行。如果在 .Net 4.5 的机器上一切正常,但在 .Net 4.0 的机器上不正常,那么这很可能是问题所在。

如我所说,这只是一次猜测,可能存在一个真正的编程问题,但作为起点值得一看。

当然,如果您被允许在应用程序中安装 .Net 4.5,那么这是可以接受的。如果不能,您可能需要找到一个编程解决方法来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接