我使用以下库编写了一个 WPF .NET 应用程序 (.NET 4.5):
- System.Windows.Interactivity.dll
- Microsoft.Practices.ServiceLocation.dll
- GalaSoft.MvvmLight.Platform.dll
- GalaSoft.MvvmLight.Extras.dll
- GalaSoft.MvvmLight.dll
我使用 2 个定时器:
System.Threading.DispatcherTimer
(每 200 毫秒计时一次)- 只需将绑定(bind)到标签的 DateTime 属性设置为 DateTime.Now。
System.Timers.Timer
(每秒计时)- 将焦点设置到文本框,从网络服务请求数据(在异步任务中)
- 更新绑定(bind)到 Datagrid 的 ICollectionView(使用
Application.Current.Dispatcher.BeginInvoke
)
该应用程序在大约 50 台 Windows 7 机器上运行(从早上 7 点到下午 5 点)没有任何问题。
仅在一台 Windows 7 机器上,它只是随机卡住,CPU 使用率高且只有一个事件线程:WgxConnection_ShouldForceSoftwareForGraphicsStreamClient
Windows 事件日志中没有条目,也没有触发此事件的用户事件。
我找不到关于此 WgxConnection...
的任何信息,有人有任何想法吗?
编辑:
刚刚找到片段“UnsafeNativeMethods.WgxConnection_ShouldForceSoftwareForGraphicsStreamClient();”在 MediaSystem.cs 中: https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/windows/Media/MediaSystem.cs
--> wpfgfx_v0400.dll
也许是“RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;”可以改变行为吗?
最佳答案
不看代码示例就很难识别问题。
这里有几点,我能想到的
- 重新访问代码,看看是否有任何阻塞代码。注意 因为你正在使用定时器,所以你必须使用线程安全列表实现(ConcurrentQueue、ConcurrentStack、ConcurrentBag)。
- 如果它在除一台以外的所有台式机上都运行良好,则查看该 PC 是否具有不同的 GPU。 WPF 和可用的 GPU 驱动程序之间可能存在一些不兼容性。
- 尝试使用 Dispatcher 计时器而不是 System.Timers.Timer。
关于C# .NET WPF 应用程序随机挂起 (WgxConnection_ShouldForceSoftwareForGraphicsStreamClient),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961507/