C#.NET WPF应用程序随机挂起(WgxConnection_ShouldForceSoftwareForGraphicsStreamClient)

时间:2017-01-31 15:38:59

标签: c# .net wpf mvvm

我使用以下库编写了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毫秒滴答)

    • 只需将绑定到标签的DateTime属性设置为DateTime.Now。
  • System.Timers.Timer(每秒滴答)

    • 将焦点设置为文本框,从Web服务(在异步任务中)请求数据
    • 更新绑定到Datagrid的ICollectionView(使用Application.Current.Dispatcher.BeginInvoke

该应用程序在约50台Windows 7计算机上运行(从早上7点到下午5点),没有任何问题。

仅在1台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;”可以改变行为吗?

2 个答案:

答案 0 :(得分:0)

如果没有看到代码示例,很难识别问题。

以下几点,我能想到

  1. 重新访问代码并查看是否有任何阻止代码。注意 因为您正在使用计时器,所以必须使用线程安全列表实现(ConcurrentQueue,ConcurrentStack,ConcurrentBag)。
  2. 如果它在所有桌面上运行良好,除了一个,那么看看该PC是否有一些不同的GPU。 WPF和可用的GPU驱动程序之间可能存在一些不兼容性。
  3. 尝试使用Dispatcher计时器而不是System.Timers.Timer。

答案 1 :(得分:0)

您的调度计时器也可用于完成系统计时器的工作。

只需在检查if(timer % 1000 == 0)时粘贴if模数语句,然后调用异步数据请求函数。

关于主要问题,找出一台计算机上的不同之处,是使用相同的显卡,驱动程序怎么样?

您是否在程序的任何位置使用缩放或其他图形效果?

我的想法是,某台驱动程序问题正在该机器上发生,它试图制定一个效果并且该系统上的图形不具备,并且由于某种原因,软件渲染无法启用它然后卡住尝试做这种效果在无限循环中。