C# 更改分辨率时防止此异常(xna中的accessviolationexception)
我在wpf解决方案中使用xna绘制了大量线条。为此,我使用以下代码行开始这项长期任务:C# 更改分辨率时防止此异常(xna中的accessviolationexception),c#,wpf,xna,C#,Wpf,Xna,我在wpf解决方案中使用xna绘制了大量线条。为此,我使用以下代码行开始这项长期任务: Task.Factory.StartNew(() => { RenderGraphics(); }, TaskCreationOptions.LongRunning); RenderGraphics方法非常简单,它是一个无限循环,可以绘制: public void RenderGraphics() { //Loop visual rendering. while (RenderGrap
Task.Factory.StartNew(() => { RenderGraphics(); }, TaskCreationOptions.LongRunning);
RenderGraphics方法非常简单,它是一个无限循环,可以绘制:
public void RenderGraphics()
{
//Loop visual rendering.
while (RenderGraphicsActive)
{
//If RefreshMode is "always" explicity call to method render each time step.
if (xnaw.RefreshMode == XNAWpf.WPFXNA.eRefreshMode.Always) { xnaw.Render(); }
}
}
RenderGraphicsActive是一个标志,如您所见,如果此标志设置为false,则此方法将永远停止
现在是它变得有趣的时候了。在方法xnaw.Render中,我在名为pDevice的GraphicsDevice中绘制了一组线,类似于:
try
{
lock (pDevice) //new code actividad 6
{
if (pDevice.GraphicsDeviceStatus == GraphicsDeviceStatus.Lost)
return;
if (pDevice.GraphicsDeviceStatus == GraphicsDeviceStatus.NotReset)
return;
if (pDevice.IsDisposed == true)
return;
//... //a bunch of code
foreach (Segment segment in Segments)
{
mSimpleEffect.CurrentTechnique.Passes[0].Apply(); //exception here
pDevice.DrawUserPrimitives < VertexPositionColor(PrimitiveType.LineStrip, segment.VertexData, 0, segment.VertexData.Length - 1); //exception here
}
}
}
catch
{
}
它就像一个符咒,但当pDevice改变时,例如当我改变分辨率时,如果程序已经在foreach中,它就会崩溃,这大约是它通常不会崩溃的10%,但我必须保证它根本不会崩溃。捕获没有帮助吗?你试过了吗?虽然我也会认为,捕获量已经足够了。还有关于这到底是什么样的“崩溃”的详细信息吗?不,那个捕获并没有帮助。我收到一个accessviolationexception。试图读取或写入受保护的内存。这通常表示其他内存已损坏。