【发布时间】:2021-12-03 16:29:11
【问题描述】:
我正在研究一个随时间步长迭代的仿真模型。有时当模型结果开始向南走时,我希望能够单击一个按钮来停止迭代。但是,如果我的测试是正确的,当迭代在 UI 线程中运行时,Button.Click 事件不会被触发,因为线程正忙于迭代。那是对的吗?当线程真的很忙时,有没有办法通过单击按钮来中断 UI 线程?
处理此问题的一种方法是使用任务并行库创建一个任务来执行计算量大的迭代。我开始研究这种方法,以防无法中断 UI 线程,但我想我会在这里检查以确保我没有错过更简单的方法。
【问题讨论】:
-
永远不应该有任何东西“在 UI 线程中运行”。 (请参阅下面的 Nathan Hughes 回答。)UI 线程应该只对 事件 做出反应,这些事件可以包括 定时器事件 以及鼠标和键盘以及其他事件。使某些东西“随时间步长迭代”的最简单方法是设置一个周期性计时器,然后在每次计时器触发时推进模型的状态。
标签: multithreading design-patterns