我正在为我的应用程序尝试this TFTP客户端作为客户端。但是,有时我的程序试图读取流引发流已经关闭的异常。在对源代码进行一些挖掘后,我发现在TftpTransfer.cs
中有Dispose方法,有时会调用,然后抛出异常。
我无法找到为什么有时会在使用流之前调用Dispose方法(在完成TFTP传输之后)以及如何解决它。
以下是设置位置为0时的代码和异常。
private static AutoResetEvent TransferFinishedEvent = new AutoResetEvent(false);
....
var client = new TftpClient("192.168.0.1");
var transfer = client.Download("00-02.conf");
transfer.OnFinished += new TftpEventHandler(transfer_OnFinshed);
transfer.OnError += new TftpErrorHandler(transfer_OnError);
Stream stream = new MemoryStream();
transfer.Start(stream);
TransferFinishedEvent.WaitOne();
stream.Position = 0;
var sr = new StreamReader(stream);
var myStr = sr.ReadToEnd();
Console.WriteLine(myStr);
...
static void transfer_OnError(ITftpTransfer transfer, TftpTransferError error)
{
Console.WriteLine("Transfer failed: " + error);
TransferFinishedEvent.Set();
}
static void transfer_OnFinshed(ITftpTransfer transfer)
{
Console.WriteLine("Transfer succeeded.");
TransferFinishedEvent.Set();
}
UPD:尚无法解决的解决方法
MemoryStream stream = new MemoryStream();
var sr = new StreamReader(new MemoryStream(stream.GetBuffer()));
transfer.Start(stream);
TransferFinishedEvent.WaitOne();
Console.WriteLine(sr.ReadToEnd());
sr
总是指向流的结尾并且它是空的。