2014-10-23 29 views
7

Ich baue eine 3D-Anwendung mit Silverlight 5. Ich habe eine DrawingSurface, die eine Methode aufruft. Wenn ich jedoch eine Navigation: Frame zu meinem XAML hinzufüge, bekomme ich dann eine Fehlermeldung. HierNavigation hinzufügen: Frame verursacht NullReferenceException

ist die Methode in Frage:

private void DrawingSurface_Draw(object sender, DrawEventArgs e) 
{ 

    GraphicsDevice device = GraphicsDeviceManager.Current.GraphicsDevice; 

    device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, 
       new Microsoft.Xna.Framework.Color(0, 0, 0, 0), 10.0f, 0); 

    device.SetVertexBuffer(_vertexBuffer); 
    device.SetVertexShader(_vertexShader); 
    device.SetPixelShader(_pixelShader); 
    device.Textures[0] = _texture; 

    device.SamplerStates[0] = SamplerState.LinearClamp; 
    device.DrawPrimitives(PrimitiveType.TriangleList, 0, 
          _vertexBuffer.VertexCount/3); 
    device.SetVertexShaderConstantFloat4(0, ref _viewProjection); 

    e.InvalidateSurface(); 

} 

Der Fehler ist auf der Linie device.DrawPrimitives(PrimitiveType.TriangleList, 0, _vertexBuffer.VertexCount/3);. Der Fehler ist, dass "NullReferenceException von Benutzercode nicht behandelt wurde". Es kommt nicht ohne die Navigation vor: Frame.

+1

Ich bin nicht vertraut mit diesem. Aber der Fehler sagt, dass 'PrimitiveType.TriangleList' und/oder' _vertexBuffer.VertexCount' null sind. Vielleicht sind sie zu diesem Zeitpunkt nicht bevölkert, wenn Sie versuchen, auf sie zuzugreifen. –

+0

mögliche Duplikate von [Was ist eine NullReferenceException und wie behebe ich sie?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

Bitte geben Sie einen Stack-Trace und alle inneren Ausnahmen an. – Nikhil

Antwort

0

Aus diesem Codeschnipsel können wir nur schließen, dass "vertexBuffer" leer oder null ist, wenn Sie diese Methode eingeben. Dies oder einige Variablen, die lokal von der "DrawPrimitive" -Methode verwendet werden.

Ich habe keine Ahnung, wie diese Variable gefüllt ist, aber insgesamt ist es gute Praxis, immer auf Null oder leer zu prüfen, wenn Sie nicht 100% sicher sind, dass Dinge im Voraus gefüllt werden.