Edit: das ist kein Duplikat, ich weiß, was eine NullReferenceException bedeutet.C# Server: NullReferenceException direkt nach Null-Prüfung
Der folgende Code ist mir eine Nullreferenceexception für "Ziel" direkt nach einem Null-Check geben:
private Entity target;
private float newPathTimer;
private float attackTimer;
public override void Update(float deltaTime) {
attackTimer += deltaTime;
// Check for target
if (target != null) {
float distance = MathExtra.PointDistance(Entity.X, Entity.Y, target.X, target.Y);
die einzigen Orte, wo "Ziel" gesetzt ist:
public override void Receive(ICommand message) {
if (message is Attack) {
target = SystemMessager.SendQuery<Entity>(new GetEntity(((Attack)message).entityID));
newPathTimer = NEW_PATH_RATE;
}
if (message is FollowPath) {
if (!((FollowPath)message).pursuit) {
target = null;
}
}
}
Alle Verweise auf " Ziel ":
Wenn es macht ein ny Unterschied, diese Anwendung ist ein Server, der Pakete an Clients empfängt und sendet.
Auch ich weiß nicht, wie man diesen Fehler reproduziert, es passiert nicht die ganze Zeit.
Bearbeiten: Die Empfangsmethode wird jedes Mal aufgerufen, wenn ein bestimmtes Paket empfangen wird. Ich denke Pakete können in einem separaten Thread empfangen werden, der dieses Problem verursacht.
Kann es sein, dass 'target' von anderen Threads mutiert ist? Angesichts der Tatsache, dass es nicht immer passiert, klingt dies wie eine Race Condition. – Stuart
Was ist null und nichtig, Nachricht? – ArthNRick
versuchen, eine Sperre zu verwenden – Nkosi