我在C#中有一个使用DuplexChannelFactory连接到服务器的程序,该服务器可以通过回调从客户端调用方法,问题是我不知道如何从主线程创建连接回调方法。有没有办法做到这一点,通过传递一个对象,或者我是否必须实现一个额外的通信层(BD,文件,等等)?
希望这不会让人感到困惑。
提前致谢。
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但我会抓住它:
我对这个问题的理解:
您有一个客户端和服务器。您的客户端向服务器发出Web服务调用,然后服务器可以在计算任何计算的过程中向客户端发出某种回调。你有这种级别的基础设施,但你现在在回调的状态和原始请求的状态之间进行通信有困难。
我在这里看到一些选项,具体取决于您尝试分享的州的性质。
1)如果您尝试共享的状态没有旋转(IE,如果您在发出请求时已知)并且不是非常大,我认为最明智的选择是通过该状态以及webservice调用,以便服务器可以将其传回回调。
2)如果状态正在旋转,您可以通过某种icky但线程安全的全局机制提供对它的访问。也许是备受诟病的单身人士,或类似的东西。
3)如果状态没有旋转,但是很大,您可能需要考虑在发送初始请求之前预先计算服务器的请求。
有各种各样的技术,其中只有极少数,但问题上的信息确实不足以给出一个好的答案。
答案 1 :(得分:0)
您想要访问主线程的原因是什么?您是否需要更新UI,并且只能在主线程上执行此操作?
在这种情况下,请查看System.Windows.Forms.Control.Invoke,它可以将委托排队到UI线程上执行。