gpt4 book ai didi

c# - 调用线程无法访问此对象,因为另一个线程拥有它

转载 作者:太空狗 更新时间:2023-10-29 18:14:23 28 4
gpt4 key购买 nike

所以我正在用 c#/wpf 制作一个简单的打砖 block 游戏。我在使用计时器时遇到问题,我觉得这可能是一个简单的修复,但这是发生了什么。每当 t_Elapsed 被触发时,它都会尝试调用 Update(),但是当它调用时,天哪,我不在正确的线程中,所以我不能那样做,先生。如何从正确的线程调用游戏中的方法? (是的,我知道代码很丑陋并且有神奇的数字,但我只是在没有付出很多努力的情况下就把它弄出来了。是的,我对编程游戏的经验为零)

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();
}
}

最佳答案

你应该使用 DispatcherTimer相反,它将确保将计时器事件发布到正确的线程。

关于c# - 调用线程无法访问此对象,因为另一个线程拥有它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com