c# - 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(){} ... 的方式调用参数文件流。那么我们如何才能更好地读取文件。你知道我们只是在一个线程中做,有时它可能会被关闭。
解决方案
您的流在StartReadBookThread
返回时被处置,并且您}
在 using 中点击了main
.
您的工作流程基本上是:
- 购买割草机(
FileStream
)。 - 请工人修剪草坪(
Thread
)。 - 立即归还割草机(
using
声明)。 - 期望工人继续用您不再拥有的割草机修剪草坪(错误的期望)。
推荐阅读
- javascript - JavaScript - 转换这个数据结构
- javascript - 为什么我的 js 不读取 removeEventlistener?
- java - java中的耦合与关联
- python - 使用python选择雅虎邮件垃圾邮件文件夹
- javascript - 引导选项卡项链接在特定页面的主菜单中不起作用
- apache-spark - 在每个分区加入 Spark 中的 RDD 以避免洗牌
- git - 错误:未能推送一些参考 | 推送本地 git repo
- azure - Azure AD B2C - 密码更改流程
- javascript - 无法在反应应用程序中添加新的依赖项
- python - 添加多个折线图时如何更改变量名称