我们有一个应用程序可用于查看可供销售的当前产品数量。用户具有用于创建过滤器的GUI,例如,所有至少1kg的黑色产品。当用户更改过滤器时,将进行带有过滤器描述的服务调用,结果将显示在图表中。服务电话很慢,比如5秒。这本身不是问题。
问题在于更改过滤器。在用户界面代码中,什么是调用Web服务的正确位置
我可以在所有button_pressed和lost_focus事件中放置一个CallWebService()行。这种感觉不太合适。
我还可以注册到数据模型中的collection_changed和property_changed事件,并在那里调用webservice。当删除列表中的所有元素时,这会导致多次调用。
我们目前在GUI之间有一个控制器类(button_press事件等),但在控制器内部有几个方法相互调用,因此会有双重服务调用。
我们使用数据模型,视图和控制器结合WPF和数据绑定但是,我们在其他应用程序中遇到了类似这些问题,我想知道将调用放到Web服务的正确位置/事件是什么。我想避免异步编程,在我看来,我的问题与异步编程无关。
答案 0 :(得分:0)
我建议当用户停止输入过滤器时有一些延迟(比如说5秒甚至更短)。
此外,如果您想要避免ui frezing,您可以使用Background worker类进行Web服务调用(并且线程将工作时显示用户的进度图像)。
答案 1 :(得分:0)
在触发实际拨打电话的网络服务电话之间,您应该有所不同。例如,您可以在任何更改机制上触发调用(例如 - 数据模型更改或按钮按下等UI事件)。触发器将(重新)启动计时器以进行服务调用。关键是每次事件到达时重新启动现有计时器。通过为计时器选择一个好的值1-2秒,当用户的操作暂停时,您可以实际进行服务呼叫。