【发布时间】:2016-01-05 07:48:10
【问题描述】:
以下两行代码依次执行:
this.dataWriter.WriteBytes(message.MessageBuffer);
await this.dataWriter.StoreAsync();
尽管WriteBytes 调用无一例外地完成,但它正下方的StoreAsync 调用会用ObjectDisposedException 炸弹并说
对象已关闭。 (HRESULT 异常:0x80000013)
this.DataWriter (Windows.Storage.Streams.DataWriter) 不为空,那么“关闭”究竟是什么意思?
编辑
只是为了进一步了解对象是如何创建的
this.socket = new StreamSocketListener();
this.socket.ConnectionReceived += this.EventSocketConnectionReceived;
private void EventSocketConnectionReceived(StreamSocketListener sender,
StreamSocketListenerConnectionReceivedEventArgs args)
{
if (this.dataWriter == null)
{
this.dataWriter = new DataWriter(args.Socket.OutputStream);
}
}
【问题讨论】:
-
dataWriter的类型是什么?
-
Windows.Storage.Streams.DataWriter
-
dataWriter的构造函数在您的代码中是什么样的?你通过什么? -
您得到了异常,因为数据写入器是一个已处置的对象。但从发布的代码来看,尚不清楚它是如何发生的。
-
完全正常。类实现 IDisposable 是因为它们有一个可丢弃的私有成员。并将其留给 那个 类来生成异常。当您调用 WriteBytes() 时,您不太可能使用该一次性对象,因为这只会占用内存。 Store(),当然,现在是 kaboom。添加 ICloseable 很晚才添加到 WinRT 的皱纹,很容易看出为什么现有方法没有额外的检查。
标签: c# windows-store-apps