例外:无法访问封闭的Stream(仅限WinXP!)

时间:2015-08-27 07:03:59

标签: c# .net .net-3.5 dispose

我正在为我的应用程序尝试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总是指向流的结尾并且它是空的。

UPD2:有一件事值得一提。异常无法访问封闭的流仅在Windows XP框中发生(.NET 3.5,我必须坚持)。我已经尝试过Windows 7,尽管有时我看到框架内部的流已经处理掉了,但我没有例外。同样,在Windows XP上,异常会随机发生。大约每3次调用我的应用程序就会抛出异常。

0 个答案:

没有答案