调试时不会加载 Directx 窗口
Posted
技术标签:
【中文标题】调试时不会加载 Directx 窗口【英文标题】:Directx window will not load when debugged 【发布时间】:2016-01-14 07:29:51 【问题描述】:我正在尝试创建一个窗口并将设备初始化到该窗口,但每次运行该程序时,该窗口都不会加载。我在 Visual Studio 2015 中为 Windows 窗体应用程序执行此操作。 这里是form1.cs:
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX.Direct3D;
namespace DirectXTutorial2
public partial class Form1 : Form
private Device device;
public Form1()
InitializeComponent();
InitializeDevice();
public void InitializeDevice()
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
private void Render()
device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 0, 1);
device.Present();
private void Form1_Paint(object sender, PaintEventArgs e)
Render();
有没有人知道这个问题的解决方案? 我不知道它是否有帮助,但我正在运行 Windows 10、64 位、Directx 2010,并且我之前已经添加了我的参考资料。
【问题讨论】:
【参考方案1】:好的,我找到了解决问题的方法。开发人员不再支持托管代码的 DirectX。适用于 DirectX 的最新框架是 .net Framework 3.5。托管代码也不支持 64 位。要解决此问题,请转到项目属性。在应用程序选项卡中找到目标框架并将您的 .net 框架更改为 3.5 或更低。接下来转到构建选项卡并找到平台目标,将其更改为 x86。
【讨论】:
【参考方案2】:首先考虑在你的应用程序中使用try catch,因为DirectX中发生了很多事情,所以你需要确认你得到错误的步骤。
try
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this,
CreateFlags.SoftwareVertexProcessing, presentParams);
catch (DirectXException)
return false;
尝试使用不同的设备类型,例如DeviceType.Software
。
清除设备后添加开始和结束场景
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
device.BeginScene();
device.EndScene();
device.Present();
并尝试调用您的“渲染”; 'Main'函数中的函数
【讨论】:
发布此问题一小时后,我尝试了 try&catch,但没有返回。相反,我使用了 MessageBox.Show()。我也尝试了不同的设备类型,但调试仍然没有出现,甚至消息框也没有。谢谢,但我 100% 确定这是编译器问题。我正在做一些研究,一个人做了一个教程,做同样的事情,我和他的工作发现。唯一的区别是他的视觉工作室是旧版本。 是的,我已经添加了 public form1(),它应该在从 Main 调用 appliction.run(new form1()) 时使用,并且我也将 Render 放入 main。两者都做了相同的结果有上面的代码。以上是关于调试时不会加载 Directx 窗口的主要内容,如果未能解决你的问题,请参考以下文章