2014-10-23 35 views
7

Sto costruendo un'applicazione 3D con Silverlight 5. Ho una DrawingSurface che chiama un metodo. Tuttavia, quando aggiungo una navigazione: Frame al mio XAML, ho quindi generato un errore.Aggiunta della navigazione: Frame provoca NullReferenceException

Ecco il metodo in questione:

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(); 

} 

L'errore è alla linea device.DrawPrimitives(PrimitiveType.TriangleList, 0, _vertexBuffer.VertexCount/3);. L'errore è che "NullReferenceException non è stato gestito dal codice utente". Non si verifica senza la navigazione: Frame.

+1

Non ho familiarità con questo. Ma l'errore dice che 'PrimitiveType.TriangleList' e/o' _vertexBuffer.VertexCount' sono nulli. Forse non sono popolati in quel momento quando si tenta di accedervi. –

+0

possibile duplicato di [Cos'è una NullReferenceException e come posso risolverlo?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

Fornire una traccia dello stack e eventuali eccezioni interne. – Nikhil

risposta

0

Da questo frammento di codice l'unica conclusione che possiamo fare è che "vertexBuffer" è vuoto o nullo quando si immette questo metodo. Quello o alcuni oggetti usati in locale con il metodo "DrawPrimitive".

Non ho idea di come venga popolata questa variabile, ma nel complesso è buona norma controllare sempre nulla o vuoto quando non sei sicuro al 100% che le cose vengano compilate in anticipo.