Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改分辨率时防止此异常(xna中的accessviolationexception)_C#_Wpf_Xna - Fatal编程技术网

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

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

我在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中,我在名为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。试图读取或写入受保护的内存。这通常表示其他内存已损坏。