C# SwapChain处的访问冲突。存在

C# SwapChain处的访问冲突。存在,c#,sharpdx,C#,Sharpdx,我在以下代码行中遇到了一个非常恼人的问题: try{ mSwapChain.Present(0, PresentFlags.None); //AccessViolationException, caught by debugger }catch(Exception Ex){ throw Ex; //Debugstop here, but not reached } //DeviceContext: SharpDX.Direct3D11.DeviceContext //mVert

我在以下代码行中遇到了一个非常恼人的问题:

try{
  mSwapChain.Present(0, PresentFlags.None);    //AccessViolationException, caught by debugger
}catch(Exception Ex){
  throw Ex;  //Debugstop here, but not reached
}

//DeviceContext: SharpDX.Direct3D11.DeviceContext
//mVertexBinding: SharpDX.Direct3D11.VertexBufferBinding

DeviceContext.InputAssembler.SetVertexBuffers(0, mVertexBinding);
DeviceContext.Draw(mNumVertices, 0);
我的程序运行一个计时器,该计时器会引发一个事件,如果该事件被引发,而我此时不进行渲染,则程序将强制执行rendercall。同时运行另一个计时器+鼠标事件,更新矩阵、顶点、缓冲区和内容-但在渲染时,所有这些更新函数都被锁定-但仅在
DeviceContext.Draw(mNumVertices,0)之前后,同步对象将解锁

我现在的问题-如果
VertexBufferBinding
Draw(…)
SwapChain.Present(…)
之间更改,是否会引发访问冲突?还是抄袭? 还有,第二,为什么我不能抓住这个访问违规?它总是一个“未处理的异常”


编辑:奇怪的是,访问冲突只出现在我的工作笔记本(Core i5、Intel HD 3000和Radeon 6490M)上,而不出现在我的家用笔记本(Core i7、Intel HD 3000和NVidia GeForce 540M)上

经过大量测试后,它指出这个问题一定是由amd动态可切换图形选项引起的-在强制集成或最大图形的情况下,异常不会出现,所以可能是当amd驱动程序更改应用程序的gpu设置时-如docs所说,“如果需要更大的功率,gpu将动态切换”。因此,这不是因为我更新了一些矩阵或顶点,而是因为在完成这些操作时,我的程序需要更大的功率(这是一个具有层次几何结构的小型cad/建模程序-当A1更新时,AX到AZ也必须重新计算)


而且,这可能不会发生在NVidia系统上,因为gpu不是动态切换的-它是在应用程序启动时设置的。

查看SwapChain的文档。现在:看起来该函数不会引发AccessViolationException,所以我认为问题来自其他地方。access的调用堆栈是什么违规?嗯..你说得对..我已经搜索了sharpdx代码,但我认为这是一个自动生成的函数..我没有关于调用堆栈的任何信息,因为它是“外部代码”"... 更多的测试告诉我,如果相机/对象的矩阵经常改变,访问冲突通常会出现。@jeroenh:>BeatCore.dll!BeatCore.DirectX.Common.DxProvider.Swap()行283 C#PaperCraft.exe!PaperCraft.MainWindow.Render()行354+0xf字节C#[外部代码]