2

我知道如何使用 SwingWorker 线程,但我仍然没有准确的标准来决定何时使用或不使用。

I/O 看起来很明显,但是在潜在的大集合上运行的方法呢?

标准可能是实际运行时间,但什么样的数字(以毫秒为单位)才符合条件?

4

5 回答 5

3

重要的是 UI 的响应性如何。

Jef Raskin(Mac UI 名人)说最大延迟应该限制在 50 毫秒。RISC OS 指南说 100 毫秒。按钮点击大约需要 50 毫秒,所以如果你想在发布时采取行动,你需要快速行动,因为用户模型通常是点击行动。超过 140 毫秒,它不仅有些无响应,而且 UI 响应似乎与用户操作脱节(例如,参见 O'Reilly 的 Mind Hacks)。

250-350 毫秒,(普通)用户会认为出了点问题。

另一方面,您需要 8 fps(包括渲染)才能产生动画(例如)滚动的错觉。而且您知道游戏玩家如何喜欢他们的 fps。

但是,与不可用的最佳软件相比,我更喜欢或多或少有用的软件。话虽如此,让 Opera 在编辑过程中敲击光盘时锁定几分钟并不让我满意。

于 2009-10-27T23:42:55.277 回答
1

对我来说,这将是 1 秒。

如果您的处理时间超过此,您的 UI 将冻结。在这种情况下,显示“忙碌”的绘画或进度条要好得多。

您希望等待您使用的任何应用程序响应多长时间?假设您打开 IDE 或 MS-Word 或其他任何东西。如果您注意到大多数情况下,当应用程序加载时,会显示进度条或其他动画,即使文档/项目/任何内容小到可以在 2 秒内打开也是如此。

于 2009-10-27T22:52:05.710 回答
0

没有具体的数字,这取决于应用程序应该做什么以及 gui 需要如何响应。最好的方法是做一些测试,没有人可以为你回答这个问题。(尽管评论可能对您确定需要进行的测试很有用)

于 2009-10-27T22:43:53.890 回答
0

一个长时间运行的任务将是任何足够长的时间让用户注意到重绘 UI 的故障或延迟。设置标签的文本可能不是“长时间运行”,但只需花费几毫秒将图像绘制到屏幕外位图中可能会延迟 UI 重绘足够长的时间以引起注意。

于 2009-10-27T23:13:48.050 回答
0

基本上,如果您无法预测处理需要多长时间,最好将其放在单独的线程中,因为即使在数据不良等极端情况下,它也会使您的应用程序保持响应。好的候选人是

  • 对模型中的所有字段执行昂贵的操作。
  • 取决于外部数据源或目标。你永远不知道这是否可能是一个慢速网络驱动器或类似的驱动器。

但是为什么不简单地制定一个规则,如果它有一个循环(任何 for/while)然后它进入一个 SwingWorker?

于 2009-10-27T23:32:56.887 回答