Eta*_*tan 9 c# sockets silverlight timeout
我Socket
在Silverlight应用程序中使用s将数据从服务器传输到客户端.
但是,我不太确定如何在Silverlight中处理超时Socket
.
在文档中,我看不到像ReceiveTimeout
Silverlight 那样的东西.
我已经检查了Reflector中的Socket类,并且没有一个相关的setsockopt调用来处理超时 - 除了在Dispose方法中.看起来Silverlight只依赖于WinSock API的默认超时.
Socket类还包含一个私有的"SetSocketOption"方法,您可以通过反射调用它 - 尽管很可能会遇到安全异常.
由于我找不到任何好的解决方案,因此我通过创建System.Threading.Timer
类似于以下内容的代码手动解决了该问题:
System.Threading.Timer t;
bool timeout;
[...]
// Initialization
t = new Timer((s) => {
lock (this) {
timeout = true;
Disconnected();
}
});
[...]
// Before each asynchronous socket operation
t.Change(10000, System.Threading.Timeout.Infinite);
[...]
// In the callback of the asynchronous socket operations
lock (this) {
t.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
if (!timeout) {
// Perform work
}
}
Run Code Online (Sandbox Code Playgroud)
这还可以处理因简单滞后而发生超时的情况,并在操作花费太多时间时让回调立即返回。
归档时间: |
|
查看次数: |
975 次 |
最近记录: |