【发布时间】:2015-08-27 08:12:08
【问题描述】:
我正在开发一个游戏,我需要从流(尚未结束)中检索数据。
我有一个名为 StreamingChannel 的类,它创建了流媒体频道
public StreamingChannel (){
//stuff to set the stream
webResponse = (HttpWebResponse) webRequest.GetResponse();
responseStream = new StreamReader (webResponse.GetResponseStream (), encode);
}
并从中读取我有这个方法
public string Read(){
try{
string jsonText = responseStream.ReadLine();
return jsonText;
}catch(ObjectDisposedException){
return null;
}
}
我使用 InvokeRepeating 每隔几秒执行一次读取,并且在整个游戏中都这样做。
效果很好,只是我的直播持续了大约几分钟。之后它会抛出一个 ObjectDisposedException。
起初我想恢复连接,但如果不重新实例化整个连接,我就无法做到。在这种情况下,问题是游戏延迟了大约一秒钟。 那么如何告诉 StreamReader 必须保持打开通道?
ps 我不能使用构造函数
public StreamReader(
Stream stream,
Encoding encoding,
bool detectEncodingFromByteOrderMarks,
int bufferSize,
bool leaveOpen)
因为它已在 .NET Framework 4.5 版本中引入,而 Unity 不支持。
【问题讨论】:
-
你确定是 StreamReader 被处理了吗?如果你在
ObjectDisposedException上调用ToString()会返回什么? -
其实我不太确定(我对此很陌生)。经过一番谷歌搜索后,我得出了这个结论。无论如何,我在 Read() 方法的 catch 子句中添加了这条指令: Debug.Log("myself " + ToString() + " webresponse " + webResponse.ToString() + " responsestream " + responseStream.ToString());输出是:我自己为空 webresponse System.Net.HttpWebResponse responsestream System.IO.StreamReader
-
将 catch(ObjectDisposedException){ 更改为 catch(ObjectDisposedException e){ 并将 Debug.Log("exception: " + e) 添加到您的 catch 块中。
-
它说:异常:System.ObjectDisposedException:对象在被释放后被使用。
-
Debug.Log("stack: " + e.StackTrace) 怎么样?
标签: c# unity3d stream streamreader