当我的文件很大时,我的writer在我关闭文件之前是空的

本文关键字:我的 文件 writer | 更新日期: 2023-09-27 17:53:25

我有一个引擎类,负责与我的Player类播放流字节,并将字节写入我的StreamWriter类文件。

我可以拥有多个引擎和多个玩家/作者。

一切都很好,直到我需要关闭文件。当我说关闭时,我的意思是添加波头并做一些操作,然后我处理写入器并打开一个新的写入器来写入字节。

我的问题是,当文件很小,它的ok,但当文件较大(几Mb),然后笔者是空的,我关闭文件之前。我怎样才能避免这种情况呢?

一些代码:Engine

AddBytesAndSave(byte,[] stream)
{
    writer.AddAndSave(stream);
    // here i think i must wait untill the operation complete
    writer.Dispose;
    writer = null;
}

Writer class

AddAndSave(byte[] stream)
{
    writrToFileWorker.RunWorkerAsync(stream);
}

当我的文件很大时,我的writer在我关闭文件之前是空的

已触发异步调用。RunWorkerAsync方法提交一个请求来启动异步运行的操作。因此,您的写入器在完成之前被dispose/null。

可以这样做,

   private void writrToFileWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
      // code to add (after the asynchronous call is completed)
       writer.Dispose;
       writer = null;         
  }

显然,还是?当数组较大时,物理写入需要更多的时间,并且由于您不需要等待-嗯…

技术上的问题是,从你的代码中运行写异步操作是没有意义的。完全没有。不需要真正的建议——任何重构都取决于我们从代码片段中不知道的情况。如果写入是异步的,那么显然不应该在AddBytesAndSave方法中关闭写入器