【发布时间】:2011-11-08 17:10:23
【问题描述】:
我有一个 C++/Cli 类库,其类为 Entity。可以使用Jump(destination)(在实体类中)更改实体的位置。
除了使用Jump(destination) 立即更改位置之外,我还需要使用Move(destination) 执行移动。运动的所有点都存储在Trajectory-class 中,我目前正在将运动实现为一系列跳转到这些点,并有一定的延迟:
for(int i = 0; i < trajectory->NumberOfSteps; i++)
{
// perform one step
destination = trajectory->Steps[i];
receivingEntity->Jump(destination);
// wait
System::Threading::Thread::Sleep(timePerStep));
}
我从 Windows 窗体 C# 应用程序调用 Move()。我当前的实现显然让我的 UI(在同一个线程中)在 Motion 执行期间冻结。
我正在寻找一种方法来让我的 UI 在运动期间保持响应,以便能够执行诸如点击取消按钮来停止运动之类的事情。 我的一个想法是做类似“在每一步之后,响应事件队列中的任何事件(如 CancelButtonClicked)”。但是如何在 .net 中执行此操作?
for(int i = 0; i < trajectory->NumberOfSteps; i++)
{
// perform one step
destination = trajectory->Steps[i];
receivingEntity->Jump(destination);
ProcessEventQueue() // How can I do this?
// wait
System::Threading::Thread::Sleep(timePerStep));
}
我的想法或更好的想法有什么解决方案吗?
我意识到我可以用另一个线程来做到这一点,但如果可能的话,我想避免这种情况。
最好的问候 丰富
【问题讨论】:
-
为什么要避免使用多线程是解决这个问题的明显方法?
-
嗨,Venemo,我想避免它,因为我已经落后于计划,而且现在开始使用多线程时我害怕遇到新问题。但如果你能提出一个简单的多线程解决方案,我也很乐意在这里。
-
是的,我可以给你一个使用多线程的简单解决方案。
标签: .net events user-interface c++-cli