0

我的情况是我有代表游戏对象的文本文件。我要做的是解析文件并获取游戏对象将被绘制到的点。例如

fruits.txt
pear 10, 20
orange 10,38

每当我 grep 一个点时,我都会使用调度程序 begininvoke 将新水果更新到屏幕上。这比调用单个线程更好。每当我有多个屏幕并行更新它们的点时,它会变得非常慢,并且在绘制到屏幕时开始挂起或帧跳动。这是因为 BeginInvoke 将消息排队吗?尽管冻结的 BeginInvoke 仍然比 Invoke 运行得更快,尽管 Invoke 的更新更流畅。我怎样才能让 BeginInvoke “刷新消息”到屏幕。在其他帖子中有一个想法,我可以将点保存在队列中并绘制到屏幕上,而队列中还有一些东西,但没有任何区别。请问有什么想法吗?谢谢。

4

1 回答 1

0

根据 MSDN Control.BeginInvoke()

在创建控件的基础句柄的线程上异步执行委托。

在您的情况下,重复调用 BeginInvoke 会向 MAIN UI 线程添加大量调用,使其陷入其他工作。

你最好将你的点放在一个队列中,然后一次将它们绘制到屏幕上,而不是尝试在同一个线程上异步运行多个绘制。

于 2012-06-11T18:21:33.053 回答