【发布时间】:2014-04-15 13:02:14
【问题描述】:
如何取消/调节与另一个线程中的相同事件并行执行的事件。
例如在文本框中,每次我们输入一个字符时,如果定义了文本更改事件,就会触发该事件。但是在输入第一个字符后,事件(让我们称之为 First Event)需要很多时间(因为会有更多的字符串匹配单个字符),并且会执行一些操作,例如更改标题标签的内容。并且在输入第二个字符后,引发并行运行的新事件需要更少的时间。所以现在,在输入第二个字符后触发的第二个事件执行速度很快并返回第一个,第一个事件最后执行,因此,第一个事件的结果最终将打印在标签上,而不是第二个。
有没有更好的方法在开始第二个事件之前取消第一个事件。我想到的一件事是在全局列表变量上注册线程并在开始执行之前杀死所有未死的线程。这行得通吗??有什么更好的方法来处理这种情况。
附:我知道可以在空格或输入后启动搜索以解决此特定问题。但我想你已经注意到我的主要观点了。 :)
【问题讨论】:
-
我会研究 Reactive Extensions 来操纵事件流以及任务并行库...
-
由于 UI 是单线程事件总是按自己的顺序排列。
-
@FelicePollano 但不一定是事件发起的回调的结果。
-
例如,如果用户输入“abc”,但您的客户端缓存了“abc”而不是“ab”的搜索结果,那么 UI 可能会更新为“abc”的结果,然后是“ab”的结果。不理想。
标签: c# multithreading events