更改分辨率时,防止此异常(xna中的accessviolationexception)

时间:2014-10-17 14:55:50

标签: c# wpf xna

我在我的wpf解决方案中使用xna绘制了大量的行。为此,我使用以下代码行开始这项长期任务:

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()中,我在我的" GraphicsDevice"中画了一堆线。 (称为" pDevice"),类似于:

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%的时间(它通常没有&#39) ;崩溃),但我必须保证它不会崩溃。

0 个答案:

没有答案