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,它在一个线程中运行。 用户我们总是喜欢在建议使用(({} 中调用参数文件流...道路。 那么我们如何才能以更好的方式读取文件。 你知道我们只是在一个线程中做,有时它可能会被关闭。

StartReadBookThread返回并且您在main中点击 using 语句中的}时,您的流将被释放。

您的工作流程基本上是:

  1. 买一台割草机(FileStream(。
  2. 要求工人修剪草坪(Thread(。
  3. 立即归还割草机(using声明(。
  4. 期望工人继续用你不再拥有的割草机修剪草坪(错误的期望(。
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 返回的线程 查看更新的代码片段。

main(string[] args)
{
string file = @"D:123.txt";
using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
f.Position = 0;
var t = StartReadBookThread(f);
t.Join(); // wait on the thread
}
}
private static Thread StartReadBookThread(Stream stream)
{
Console.WriteLine("CanSeek:" + stream.CanSeek);
var t = new Thread(() => DoReadBook(stream));
t.Start();
return t;
}

相关内容

  • 没有找到相关文章

最新更新