0

我正在使用托管 DirectX/C#/WinForms 进行一些图形和视频渲染。

我正在使用自己的 SwapChain 并设置 Device.IsUsingEventHandlers = true,否则不会调用我的 for OnDeviceLost 和 OnDeviceReset 事件处理程序(为什么?)

因此,当用户单击以最小化表单时,我收到了对 OnResize() 的调用,我将其覆盖。this.ClientSize 是 (0, 0) 最小化。

在 OnResize() 调用中,我设置标志以跳过 Draw() 函数。

我得到 OnDeviceLost 事件处理程序调用,我在其中释放资源。

之后,代码在“自动/隐式” device.Reset() 调用上崩溃,通常会调用 OnDeviceReset() 甚至是我为我的设备设置的处理程序。

我无法找到应该如何处理这个最小化事件以避免隐式 device.Reset() 上的崩溃。需要帮助,请。

我是否需要在最小化时处理设备并销毁 DirectShow 图形(我并不总是渲染视频)?或者是否有处理最小化事件的标准方法?即使我不创建 DirectShow 图形,代码也会崩溃,只是在这里和那里渲染几行,没有视频,所以崩溃似乎与 DirectShow 无关。

崩溃调用堆栈如下所示: 应用程序中的错误。

Microsoft.DirectX.Direct3D
   at Microsoft.DirectX.Direct3D.Device.Reset(PresentParameters[] presentationParameters)
   at Microsoft.DirectX.Direct3D.Device.OnParentResized(Object sender, EventArgs e)
   at System.EventHandler.Invoke(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
   at WeifenLuo.WinFormsUI.Docking.DockContent.OnSizeChanged(EventArgs e)
   at System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
   at System.Windows.Forms.Control.UpdateBounds()
   at System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
4

0 回答 0