編集:これは複製ではなく、NullReferenceExceptionの意味を知っています。C#サーバー:ヌルチェック直後のNullReferenceException
次のコードは、右のヌルチェックの後、私に「ターゲット」のためとNullReferenceExceptionを与えている: "に
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;
}
}
}
すべての参照を:「目標」が設定されているだけの場所に
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);
「ターゲット:
が落札した場合このアプリケーションは、クライアントにパケットを送受信するサーバーです。
また、このエラーを再現する方法はわかりませんが、常に発生するわけではありません。
編集:receiveメソッドは、特定のパケットを受信するたびに呼び出されます。私はパケットがこの問題を引き起こす別のスレッドで受け取られるかもしれないと思う。
'target'が他のスレッドによって突然変異している可能性はありますか?それはすべての時間に起こるわけではない、これは競合状態のように聞こえる。 – Stuart
nullとvoid、メッセージは何ですか? – ArthNRick
ロックを試してみよう – Nkosi