Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用回调函数访问主线程_C#_Web Services_Callback - Fatal编程技术网

C# 使用回调函数访问主线程

C# 使用回调函数访问主线程,c#,web-services,callback,C#,Web Services,Callback,我有一个C#中的程序,它使用DuplexChannelFactory连接到服务器,服务器可以通过回调从客户端调用方法,问题是如果连接是通过回调方法创建的,我不知道如何访问主线程。有没有办法做到这一点,通过传递一个对象,或者我必须实现一个额外的通信层(BD、文件等) 希望这不会太令人困惑 提前谢谢。我不确定我是否完全理解你的问题,但我想尝试一下: 我对问题的理解是: 您有一个客户端和服务器。您的客户机向服务器发出webservice调用,然后服务器可以在计算任何计算结果的过程中向客户机发出某种形式

我有一个C#中的程序,它使用DuplexChannelFactory连接到服务器,服务器可以通过回调从客户端调用方法,问题是如果连接是通过回调方法创建的,我不知道如何访问主线程。有没有办法做到这一点,通过传递一个对象,或者我必须实现一个额外的通信层(BD、文件等)

希望这不会太令人困惑


提前谢谢。

我不确定我是否完全理解你的问题,但我想尝试一下:

我对问题的理解是:

您有一个客户端和服务器。您的客户机向服务器发出webservice调用,然后服务器可以在计算任何计算结果的过程中向客户机发出某种形式的回调。这一级别的基础设施可以正常工作,但您现在很难在回调状态和原始请求状态之间进行通信

我在这里看到了一些选择,这取决于你试图分享的州的性质

1) 如果您试图共享的状态没有旋转(即,如果您发出请求时知道该状态),并且不是非常大,我认为最明智的选择是将该状态与webservice调用一起传递,以便服务器可以将其传递回回调

2) 如果状态正在旋转,您可以通过某种讨厌但线程安全的全局机制提供对它的访问。也许是备受诟病的单身汉,或者类似的人

< P> 3)如果状态不旋转,但较大,则可能需要考虑在发送初始请求之前预先计算服务器的请求。
有各种各样的技术,其中只有极少数,但问题中确实没有足够的信息给出好的答案。

您希望访问主线程的原因是什么?您是否需要更新UI,并且只能在主线程上更新


在这种情况下,请查看System.Windows.Forms.Control.Invoke,它可以将要在UI线程上执行的委托排队。

谢谢您的回复。我真的无法解释得比我更好(缺乏英语和技术语法),但我最终解决了我的问题,因为我可以访问正在创建的回调对象。无论如何,再次谢谢你。