【发布时间】:2011-07-14 13:20:09
【问题描述】:
我有 WPF 应用程序需要在启动时访问 WCF 服务(登录窗口)。每次应用程序在 Windows 7 上运行时,它都会在登录时冻结,直到从 WCF 获得响应。有什么方法可以不同地设计这个过程吗?
【问题讨论】:
我有 WPF 应用程序需要在启动时访问 WCF 服务(登录窗口)。每次应用程序在 Windows 7 上运行时,它都会在登录时冻结,直到从 WCF 获得响应。有什么方法可以不同地设计这个过程吗?
【问题讨论】:
听起来您需要异步进行调用。要么在新线程上启动调用(最好使用Task),要么使用asynchronous design pattern 调用WCF 服务。
【讨论】:
将 WCF 调用放在后台线程中
【讨论】:
在执行 WCF 服务调用时,有两个原因会导致某些东西“冻结”:
【讨论】:
如果您需要此服务调用的响应来启动应用程序,您可以使用后台线程调用此服务并处理返回值。当此线程正在使用该服务时,您可以显示您的窗口或启动画面。
如果您不需要此服务方法的返回值,您可以在您的服务上使用 [OperationContract(IsOneWay=true)]。这样您就不必担心线程和其他东西。
【讨论】:
您在主线程上调用 WCF 调用,因此它看起来会崩溃。
您可以通过定义一个 Thread,然后定义一个 threadstart,传入您的登录 WCF 调用,以及调用 thread.start() 来非常轻松地创建线程;并传入您定义的 threadstart。
后台工作人员非常相似,您可以将代码放在 backgroundWorker1_DoWork() 方法中
试试这个线程进行异步 WCF 调用
【讨论】: