代码之家  ›  专栏  ›  技术社区  ›  Shalom Craimer

第二次调用设备。在DirectX中重置会引发InvalidCallException

  •  3
  • Shalom Craimer  · 技术社区  · 17 年前

    我一直在用C#开发DirectX应用程序,我注意到当我锁定工作站时,DirectX“设备”会丢失。在查找有关设备丢失时(以及 DeviceLostException 被抛弃 Device.Present ),我重新编写了代码以重置 Device . 这仅仅意味着我打了个电话给 Device.Reset

    使命感 设备,复位 . 没问题。但是,当我第二次丢失设备时(例如,当计算机被锁定、进入睡眠状态或激活屏幕保护程序时),会引发异常 .

    InvalidCallException ,这(根据文档)意味着电话出了问题。所以我假设函数的参数有问题。因此,与其传递同一份 PresentParams 在我用来创建设备时,我创建了PresentParams的一个新实例(起初使用复制构造函数,后来不使用它重新创建),并将其传递给 设备,复位 .

    还是会随着死亡而死去 无效调用异常

    你能告诉我一个解决方案的方向,或者一些关于如何从DirectX获得更多调试信息的文档吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Shalom Craimer    17 年前

    好吧,我知道回答我自己的问题是多么愚蠢,但我想其他人可能需要这个,嗯?

    这个 答案是 当前位置打给服务器的电话太多 Dispose 方法 VertexBuffer Device 重置处理程序正在调用 处置 顶点缓冲区 他在用什么 Pool.Default 而不是 Pool.Managed .

    所以很明显,在几千个糟糕的分配和发布周期之后,出现了一些问题。

    VertexBuffer.Dispose 它增加了我在屏幕上显示的计数器。想象一下,当我调整窗口大小时,发现这个计数器不断增大时,我会有多么惊讶!