WCF线程 - 无响应的UI

Sha*_*air 6 .net wcf user-interface multithreading servicehost

我正在尝试配置一些WCF的东西.目前,我有一个允许远程用户下载文件的服务器和客户端.在服务器中,我使用ServiceHost类.我假设它应该在一个单独的线程上运行,但是,当有人下载​​文件时,服务器UI(WinForms)会被锁定.有没有办法管理WCF线程模型?

谢谢!

luk*_*san 11

您应该将ServiceBehaviorAtttribute添加到实现您的服务的类,并将其UseSynchronizationContext属性设置为false.这将导致在您自己的线程上处理对您的服务的调用.

例:

[ServiceBehavior(UseSynchronizationContext=false)]
class YourService : IYourService
{
  // Service Methods
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果要从服务方法中更新任何控件,则必须牢记Windows窗体跨线程编程模型.


Sha*_*air 1

“在同一个 Windows 窗体应用程序中,如果您要在启动 UI 线程之前构造 ServiceHost 实例,它将在自己的线程上运行。这意味着从线程池分配的工作线程处理消息而不是消息循环。因此,服务可以真正处理多个并发请求。”