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

标签 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 毫秒计时一次)

    • 只需将绑定(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;”可以改变行为吗?

最佳答案

不看代码示例就很难识别问题。

这里有几点,我能想到的

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

关于C# .NET WPF 应用程序随机挂起 (WgxConnection_ShouldForceSoftwareForGraphicsStreamClient),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961507/

相关文章:

c# - 如何在 Angular 6 中上传文件时修复 415 不受支持的媒体类型

WPF ValidationRule 加载控件时验证

c# - 通过拇指调整用户控件的 wpf 大小与拖动不成比例

.Net 如何按计数获取列表中的公共(public)元素

.net - 添加 NuGet 包失败

c# - 如何为另一个泛型类使用泛型参数类型?

c# - 按钮的依赖属性

c# - 授权在 ASP.NET MVC 5 中不起作用

c# - 在 1 个 url 下托管 2 个独立的 MVC 网站

c# - 通过 C# 对 ObservableCollection<string> 进行排序