C# - Multithreading (XNA Spelprogrammering)
Tjo!
Är rätt ny med multithreading och har nu stött på ett problem.
Följande är en Draw() funktion från en class jag använder
public void Draw(SpriteBatch spriteBatch)
{
if (Visible)
{
spriteBatch.Draw(background, size, Color.White);
foreach (ChatMessage chatMsg in Messages.ToList())
{
if (chatMsg != null)
{
if ((size.Y + chatMsg.Position.Y > size.Y) && (size.Y + chatMsg.Position.Y < size.Y + size.Height))
{
if (string.Compare(chatMsg.WhoSays, "YOU") == 0)
{
spriteBatch.DrawString(font, chatMsg.Text, new Vector2(size.X + chatMsg.Position.X, size.Y + chatMsg.Position.Y), new Color(153, 217, 234));
}
else if (string.Compare(chatMsg.WhoSays, "PLAYER") == 0)
{
spriteBatch.DrawString(font, chatMsg.Text, new Vector2(size.X + chatMsg.Position.X, size.Y + chatMsg.Position.Y), Color.White);
}
else if (string.Compare(chatMsg.WhoSays, "SYSTEM") == 0)
{
spriteBatch.DrawString(font, chatMsg.Text, new Vector2(size.X + chatMsg.Position.X, size.Y + chatMsg.Position.Y), Color.Yellow);
}
}
}
}
chatBox.Draw(spriteBatch);
}
}
Då den anropas hela tiden samt att jag modiferar Messages-listan i princip hela tiden så får jag tillsist ett error-message vid foreach() efter ett tag, men jag har kollat upp felmeddelandet och vad jag har förstått så försöker jag köra foreach() när den redan körs dvs två trådar försöker köra samma funktion samtidigt... Så min fråga blir då, finns det något sätt att kolla om ingen tråd går igenom listan redan?
Felmeddelande:
ArgumentException unhandled:
Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
EDIT: Har kört spelet ett längre tag nu och har Inte fått felmeddelandet igen, men då jag har fått det en gång så måste det ju finnas risk att det kommer att komma igen? Då jag antar att det har med thread timing att göra?
C#/MonoGame Fanatiker.
Pixel Artist & Game Developer