目前我正在WPF应用程序中工作,我正在处理一个场景。
我的应用程序具有搜索功能,根据搜索条件,将填充网格。为了使应用程序响应,我们已经实现了TPL。
像这样的东西
Task.Factory.StartNew(() =>
{
//Webservice Call
Dispatcher.Invoke(() =>
{
//Data from webservice assigned to Collection binded to Grid
});
}
);
我有一个问题。
假设我已经输入搜索条件'A'并点击搜索,在一秒钟内我改变主意并用'B'更新搜索条件,我点击搜索按钮,再次我认为这是错误的我必须搜索一些东西否则,我将标准更改为“C”,然后再次单击“搜索”。 问题是A的服务响应在20秒内,B 25秒,但C只有5秒。
根据我的搜索,我必须显示最新的搜索条件,这将是C,但我的数据正在更新B的记录。我看了网络但没能得到任何帮助。我错过了什么。任何帮助将不胜感激。
答案 0 :(得分:1)
基本上每次进行搜索时,都要创建一个新的CancellationTokenSource并将其保留在搜索类中。
将CancellationToken传递给您的异步功能。网络摄像头完成后,请在更新结果前检查令牌是否已取消,或者只是致电cancelToken.ThrowIfCancellationRequested()
。
您甚至可以将其传递到您的网络摄像头中以立即取消呼叫,或使用令牌的Register()方法明确中止网络摄像头。
如果您执行新搜索,请取消当前令牌源并创建一个新源。任何当前的通话都将在不更新的情况下完成。
答案 1 :(得分:0)
对于响应速度非常快的自动搜索字段,我建议使用RX Framework而不是尝试滚动自己的逻辑,这样您就可以订阅已更改的事件,但也可以对其进行操作(缓冲它,保持最新状态),以便您可以轻松地说出类似于"获取关键事件,只要有新事件并且不到250毫秒就会忽略它们,然后进行搜索,如果在此期间触发了另一个搜索则删除该搜索,否则显示它&# 34 ;.如果没有RX Framework并嵌套ifs和cancellations,这不是你可以轻松编写的东西
答案 2 :(得分:-1)
请参阅此url将有更多帮助,因为类似的事情已经在那里讨论过,并且很少有专家的回答