我是MVVM和WPF的新手。我的WPF应用程序将每2分钟调用一次Web服务,并在UI中显示响应。通过单击UI中的按钮,提供手动调用相同Web服务的机会。我的网络服务超时是5000毫秒。我的问题是,如果Web服务需要超过1000毫秒如何避免使用hanhing UI。 Plz提供了一些实现提示
答案 0 :(得分:5)
这将是实现多个线程的好地方,在一个线程中执行所有Web应用程序通信允许主UI线程响应用户输入。
以下是一些可以帮助您前进的链接:
答案 1 :(得分:3)
使用线程怎么样? MSDN从2007年开始就基础知识进行了很好的撰写:
WPF Threads: Build More Responsive Apps with The Dispatcher
确保您不仅关注Dispatcher,还关注BackgroundWorker
上的第二个。
如果您根本不熟悉线程(看起来可能就是这种情况),那么您应该从MSDN的简单线程基础开始:
答案 2 :(得分:2)
您可以使用异步Web服务调用与Web服务进行通信。
的示例:
http://patconroy.wordpress.com/2009/01/22/asynchronous-web-service-invocation/
http://www.codeguru.com/csharp/csharp/cs_webservices/security/article.php/c9179
http://ondotnet.com/pub/a/dotnet/2005/08/01/async_webservices.html
答案 3 :(得分:1)
基本上,你不应该在UI线程上做任何可以花费任何时间执行的工作。您应该在View Model中有某种形式的Command对象,该对象可以数据绑定到View的按钮。该命令应该在另一个线程上异步调用您的Web服务调用。这样,UI永远不会挂起,等待命令返回,因为命令将很快返回。当异步调用返回时,您可以处理更新您需要执行的任何UI操作。
答案 4 :(得分:0)
使用后台工作程序,如果要将数据返回到UI,请使用Dispatcher。如果使用.net 4.0,请使用Tasks。