Так что я делаю простую игру с разбивкой кирпича в C#/wpf. Я сталкиваюсь с проблемой с использованием таймеров, я чувствую, что это, вероятно, простое решение, но вот что происходит. Всякий раз, когда t_Elapsed уволен, он пытается вызвать Update(), но когда он делает это, как OMG Im, не в нужном потоке, поэтому я не могу сделать это сэр. Как мне вызвать метод из игры из соответствующей нити? (И да, я знаю, что код уродлив и имеет магические числа, но я просто любопытный пыхтя его, не подвергая много усилий. И да, у меня есть ноль игры опыт программирования)Вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток.
public partial class Game : Grid
{
public bool running;
public Paddle p;
public Ball b;
Timer t;
public Game()
{
Width = 500;
Height = 400;
t = new Timer(20);
p = new Paddle();
b = new Ball();
for (int i = 15; i < 300; i += 15)
{
for (int j = 15; j < 455; j += 30)
{
Brick br = new Brick();
br.Margin = new Thickness(j, i, j + 30, i + 15);
Children.Add(br);
}
}
Children.Add(p);
Children.Add(b);
p.Focus();
t.AutoReset = true;
t.Start();
t.Elapsed += new ElapsedEventHandler(t_Elapsed);
}
void t_Elapsed(object sender, ElapsedEventArgs e)
{
if (running)
{
Update();
}
}
void Update()
{
b.Update(); //Error here when Update is called from t_Elapsed event
}
void Begin()
{
running = true;
b.Initiate();
}
}
'OMG Im не в правильном потоке, так что я не могу сделать это sir.' <3 – Laserbeak43