2009-08-01 63 views
0

我正在为一个程序编写一个插件,我使用TreeView来定制用户控件。当用户选择或取消选择本地程序中的对象时ObjectSelectedObjectDeselected事件被唤起。当这些事件被触发时,我的程序将在树视图中选择或取消选择相应的节点。如何判断最后一系列事件是否被遏制?

问题是这是一个图形3D建模程序。因此,用户很容易在一千个小对象上画一个选择框,并用一千个ObjectSelected事件敲打我的代码。所以现在我的插件可以工作,但是如果用户选择了太多的对象,他们必须等待我的插件处理所有事件的全部对象。

而不是在每个选择事件做一些事情,我可以缓存选定的对象到一个单独的集合,然后批量处理列表,而不是每次一个对象。但是我怎么知道什么时候最后的ObjectSelected事件被诱发?

我想我需要利用多个线程,以便每个对象选定的事件重置计时器。当计时器终于有机会达到它的结束时间时,它将处理所选对象的完整列表。

虽然我从来没有做过任何与多线程,所以我不知道从哪里开始这样的事情。另外,我并不喜欢让我的插件依赖于某个预定义的时间限制的想法。如果用户在更快/更慢的计算机上,该怎么办?或者,如果他们选择的对象之一非常复杂,并且由于某种原因需要更长时间才能选择其他对象?

回答

0

虽然你说过你不想使用多个线程,但这是他们的确切情况(在一个单独的线程上有一个UI作为背景计算)。

幸运的是,C#让基本线程真的很容易。看看BackgroundWorker类和它的一些例子。

您可以通过添加取消BackgroundWorker的功能并重新开始新计算来快速选择不同项目来解决问题。

相关问题