C# 如何使用SharpDX调用Trim?

C# 如何使用SharpDX调用Trim?,c#,windows-8.1,sharpdx,C#,Windows 8.1,Sharpdx,我的windows 8应用未通过认证测试: 当应用程序即将挂起时,应随时在其IDXGIDevice3接口上调用Trim API 链接将我带到C++页面,但我使用SharpDX。我只能在一本书的帖子中找到一个例子 不幸的是,它提到了一个DeviceManager类(我想是书中的),我的SharpDX.DXGI.Device3不见了。有一个设备1和设备2,但没有3。可能是库的不同版本,或者我缺少了对其他内容的引用 因此,我正在寻找一个如何调用Trim的示例,以使认证应用程序愉快,并在挂起应用程序时清

我的windows 8应用未通过认证测试:

当应用程序即将挂起时,应随时在其IDXGIDevice3接口上调用Trim API

<>链接将我带到C++页面,但我使用SharpDX。我只能在一本书的帖子中找到一个例子

不幸的是,它提到了一个DeviceManager类(我想是书中的),我的SharpDX.DXGI.Device3不见了。有一个设备1和设备2,但没有3。可能是库的不同版本,或者我缺少了对其他内容的引用

因此,我正在寻找一个如何调用Trim的示例,以使认证应用程序愉快,并在挂起应用程序时清除任何图形对象等

void App::OnSuspending(
_In_ Platform::Object^ sender,
_In_ Windows::ApplicationModel::SuspendingEventArgs^ args
)
  {
      Windows::ApplicationModel::SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral();

      // Save application data

      m_exampleDxgiAdapter->Trim();
      deferral->Complete();
  }

SharpDX.DXGI.Device3
可从DirectX11_2-winrt组件的最新SharpDX开发包(2.5.1)获得


此DeviceManager不是DirectX API的一部分,但看起来它是本书样本的一部分。您需要通过“COM查询”原始DXGI设备上的接口来检索Device3设备(类似于
deviceManager.Device1.QueryInterface();

SharpDX.DXGI.Device3
可从DirectX11\U 2-winrt程序集中的最新SharpDX开发包(2.5.1)获得


此DeviceManager不是DirectX API的一部分,但看起来它是本书样本的一部分。您需要通过“COM查询”原始DXGI设备上的接口来检索Device3设备(类似于
deviceManager.Device1.QueryInterface();

以下示例显示如何调用
Trim()
,以通过认证过程:

async void OnSuspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
    var Deferral = e.SuspendingOperation.GetDeferral();

    using (var Device = new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware, SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, new[] { SharpDX.Direct3D.FeatureLevel.Level_11_1, SharpDX.Direct3D.FeatureLevel.Level_11_0 }))
    using (var Direct3DDevice = Device.QueryInterface<SharpDX.Direct3D11.Device1>())
    using (var DxgiDevice3 = Direct3DDevice.QueryInterface<SharpDX.DXGI.Device3>())
        DxgiDevice3.Trim();

    Deferral.Complete();
}
async void onSuspend(对象发送方,Windows.ApplicationModel.SuspendingEventArgs e)
{
var deleral=e.SuspendingOperation.getdeleral();
使用(var Device=new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware,SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport,new[]{SharpDX.Direct3D.FeatureLevel.Level_11_1,SharpDX.Direct3D.FeatureLevel.Level_11_0})
使用(var Direct3DDevice=Device.QueryInterface())
使用(var DxgiDevice3=Direct3DDevice.QueryInterface())
dxgideviece3.Trim();
延迟。完成();
}

您必须为
SharpDX.DXGI.Device3
下载并使用(当前为2.5.1)。以下示例显示了如何调用
Trim()
以通过认证过程:

async void OnSuspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
    var Deferral = e.SuspendingOperation.GetDeferral();

    using (var Device = new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware, SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, new[] { SharpDX.Direct3D.FeatureLevel.Level_11_1, SharpDX.Direct3D.FeatureLevel.Level_11_0 }))
    using (var Direct3DDevice = Device.QueryInterface<SharpDX.Direct3D11.Device1>())
    using (var DxgiDevice3 = Direct3DDevice.QueryInterface<SharpDX.DXGI.Device3>())
        DxgiDevice3.Trim();

    Deferral.Complete();
}
async void onSuspend(对象发送方,Windows.ApplicationModel.SuspendingEventArgs e)
{
var deleral=e.SuspendingOperation.getdeleral();
使用(var Device=new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware,SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport,new[]{SharpDX.Direct3D.FeatureLevel.Level_11_1,SharpDX.Direct3D.FeatureLevel.Level_11_0})
使用(var Direct3DDevice=Device.QueryInterface())
使用(var DxgiDevice3=Direct3DDevice.QueryInterface())
dxgideviece3.Trim();
延迟。完成();
}

您必须为
SharpDX.DXGI.Device3

下载并使用(目前为2.5.1版),请立即查看。另请注意,下载页面上可能应该有该开发包的链接。我一直在尝试用那一页上的(2.5.0)解决这个问题。在搜索了2.5.1之后,我在About页面上找到了它,但这并没有帮助。Microsoft工具告诉我需要调用Trim,据我所知,我甚至没有使用DirectX3D(我使用SharpDX修改一些位图Direct2D1-即在其上绘制文本),所以我觉得我必须添加此代码才能调用Trim,而我甚至没有使用它。因此,我想知道目前如何从中获取设备。您应该在此处发布Direct2D设备的整个初始化,因为您的描述中确实不清楚您在使用/做什么(此设备管理器,您是否有源代码?它是否与SharpDX示例中的相同-这是不好的,不应用于生产代码). 通常Direct2D设备是从Direct3D设备初始化的。太棒了,现在就检查它。另请注意,下载页面上可能应该有该开发包的链接。我一直在尝试用那一页上的(2.5.0)解决这个问题。在搜索了2.5.1之后,我在About页面上找到了它,但这并没有帮助。Microsoft工具告诉我需要调用Trim,据我所知,我甚至没有使用DirectX3D(我使用SharpDX修改一些位图Direct2D1-即在其上绘制文本),所以我觉得我必须添加此代码才能调用Trim,而我甚至没有使用它。因此,我想知道目前如何从中获取设备。您应该在此处发布Direct2D设备的整个初始化,因为您的描述中确实不清楚您在使用/做什么(此设备管理器,您是否有源代码?它是否与SharpDX示例中的相同-这是不好的,不应用于生产代码). 通常,Direct2D设备是从Direct3D设备初始化的。