首页 > 解决方案 > C# 文件流在线程中变得关闭

问题描述

main(string[] args) {
    string file = @"D:\123.txt";

    using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        f.Position = 0;
        StartReadBookThread(f);
    }   
}
//this is a public API for user
public static Thread StartReadBookThread(Stream stream)
{
    Console.WriteLine("CanSeek:" + stream.CanSeek);
    var t = new Thread(() => DoReadBook(stream));
    t.Start();
    return t;
}

private static void DoReadBook(Stream stream)
{
    Console.WriteLine("CanSeek:" + stream.CanSeek);
}

在该DoReadBook方法中,流变为关闭,CanSeek变为假。
如果我想在线程中读取流,如何处理它,一般方式是我们为用户提供公共 API StartReadBookThread 并在线程中运行。用户我们总是喜欢以建议 using(){} ... 的方式调用参数文件流。那么我们如何才能更好地读取文件。你知道我们只是在一个线程中做,有时它可能会被关闭。

标签: c#filestream

解决方案


您的流在StartReadBookThread返回时被处置,并且您}在 using 中点击了main.

您的工作流程基本上是:

  1. 购买割草机(FileStream)。
  2. 请工人修剪草坪(Thread)。
  3. 立即归还割草机(using声明)。
  4. 期望工人继续用您不再拥有的割草机修剪草坪(错误的期望)。

推荐阅读