gpt4 book ai didi

c# - 处理 FileStream 不会结束异步读取

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:17 24 4
gpt4 key购买 nike

我打开一个要异步写入的 FileStream。

m_oFile.BeginRead(arrInputReport, 0, m_nInputReportLength, new AsyncCallback(ReadCompleted), arrInputReport);

我使用以下代码处理它:

if (bDisposing)
{
if (m_oFile != null)
{
m_oFile.Dispose();
m_oFile = null;
}

不幸的是,调用dispose方法后,ReadComplete方法仍然收到结果:

protected void ReadCompleted(IAsyncResult iResult)
{
byte[] arrBuff = (byte[])iResult.AsyncState; // retrieve the read buffer
try
{
m_oFile.EndRead(iResult);

它将在 m_oFile.EndRead 行出现 nullReference 错误。检查 null 可以消除异常,但只会将程序困在这个方法中。如何处理 ReadComplete 方法?

最佳答案

如果您没有可靠 访问您使用的实例,那么我建议使用AsyncState 来存储您需要的所有内容。例如:

var state = Tuple.Create(m_oFile, arrInputReport);
m_oFile.BeginRead(...blah... , ReadCompleted, state);

与:

var state = (Tuple<FileInfo, byte[]>)iResult.AsyncState;
FileInfo file = state.Item1;
byte[] arrBuff = state.Item2;

注意 null 检查是不够的,因为如果使用了一个文件,您将在错误的 FileInfo 实例上调用它 - 这不是一个好主意

关于c# - 处理 FileStream 不会结束异步读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com