我有一个 C# 程序,它使用 DuplexChannelFactory 连接到服务器,并且该服务器可以通过回调从客户端调用方法,问题是我不知道如何访问主线程,如果连接是从回调方法创建的. 有没有办法通过传递一个对象来做到这一点,或者我是否必须实现一个额外的通信层(BD、文件等)?
希望这不会让人感到困惑。
提前致谢。
我有一个 C# 程序,它使用 DuplexChannelFactory 连接到服务器,并且该服务器可以通过回调从客户端调用方法,问题是我不知道如何访问主线程,如果连接是从回调方法创建的. 有没有办法通过传递一个对象来做到这一点,或者我是否必须实现一个额外的通信层(BD、文件等)?
希望这不会让人感到困惑。
提前致谢。
我不确定我是否完全理解你的问题,但我会尝试一下:
我对这个问题的理解:
你有一个客户端和服务器。您的客户端对服务器进行 Web 服务调用,然后服务器可以在计算它所计算的任何内容的过程中对客户端进行某种回调。你有这个级别的基础设施工作,但你现在很难在回调的状态和原始请求的状态之间进行通信。
我在这里看到了一些选项,具体取决于您尝试共享的状态的性质。
1)如果您尝试共享的状态没有旋转(IE,如果在您发出请求时知道它)并且不是非常大,我认为最明智的选择是将该状态与webservice 调用,以便服务器可以将其传递回回调。
2) 如果状态正在旋转,您可以通过某种令人讨厌但线程安全的全局机制来提供对它的访问。也许是饱受诟病的单身人士,或者类似的东西。
3) 如果状态没有旋转,但很大,您可能需要考虑在发送初始请求之前预先计算服务器的请求。
有各种各样的技术,其中只是极少数,但问题中确实没有足够的信息来给出一个好的答案。
What is your reason for wanting to access the main thread? Do you need to update a UI, and can only do that on the main thread?
In that case, look at System.Windows.Forms.Control.Invoke, which can queue a delegate to be executed on the UI thread.