cross thread - c#
Har lite problem med en funktion som försöker ändra i en annan tråd än den tråd funktionen körs i.
here's the code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
namespace snake
{
public partial class Form1 : Form
{
public static int dir = 1, x, y;
public static Point p;
public Form1()
{
InitializeComponent();
p = blacksq.Location;
}
private void Form1_Load(object sender, EventArgs e)
{
Timer();
}
public void Timer()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(onTimedEvent);
// time in ms = 4 moves per sec
aTimer.Interval = 250;
aTimer.Enabled = true;
MessageBox.Show("timer started");
}
//onTimedEvent - move snake
public void onTimedEvent(object source, ElapsedEventArgs e)
{
Point p = blacksq.Location;
// x = east/west
// y = north/south
if (dir == 0)
{
//move north
p.Y += 5;
//blacksq.Location = p;
Location = p;
}
else if (dir == 1)
{
//move east
p.X += 5;
Location = p;
}
else if (dir == 2)
{
//move south
p.Y -= 5;
Location = p;
}
else if (dir == 3)
{
//move west
p.X -= 5;
Location = p;
};
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// on keypress (arrows) change direction
if (e.KeyCode == Keys.Right)
{
dir = 0;
}
else if (e.KeyCode == Keys.Up)
{
dir = 1;
}
else if (e.KeyCode == Keys.Left)
{
dir = 2;
}
else if (e.KeyCode == Keys.Down)
{
dir = 3;
}
}
}
}
Försöker altså göra någonting snake-liknande, och blacksq är själva "ormen" - en svart fyrkant i en picturebox. Vill ni ha designer-koden också så säg till, program.cs innehåller ingenting extra.
Finns det någon som kan lära mig hur man undviker problemet? Känns som att en lösning vore att köra alla entrådat, men det känns bättre att veta med tanke på eventuella senare kreationer som drar lite mera kraft.
Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."