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(){} ...的方式调用参数文件流。因此我们如何更好地读取文件。您知道我们只是在线程中执行此操作,有时它可能会关闭。
StartReadBookThread
返回并在}
的using语句中击中main
时,您的流被处置。
您的工作流程基本上是:
FileStream
)。Thread
)。using
语句。 using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var stream = new MemoryStream();
f.Position = 0;
f.CopyTo(stream);
StartReadBookThread(stream );
}
您需要等待从功能StartReadBookThread返回的线程请查看更新的代码段。