当我的文件很大时,我的编写器在关闭文件之前为空

时间:2013-01-15 08:29:22

标签: c# .net synchronization backgroundworker

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

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

一切正常,直到我需要关闭文件。当我说关闭时,我的意思是添加wave标头并执行一些操作,然后我释放写入器并打开一个新的编写器来写入字节。

我的问题是,当文件很小时,它可以,但是当文件较大(几Mb)时,编写器在关闭文件之前为空。我怎么能避免这个?

一些代码: Engine

AddBytesAndSave(byte,[] stream)
{
    writer.AddAndSave(stream);

    // here i think i must wait untill the operation complete
    writer.Dispose;
    writer = null;
}

Writer上课

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

2 个答案:

答案 0 :(得分:1)

您已触发异步调用。 RunWorkerAsync方法提交请求以启动异步运行的操作。所以,你的作家在完成之前就被处理掉了。

可以这样做,

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

答案 1 :(得分:0)

显然,还是?当数组较大时,物理写入需要更多时间,因为你不等待 - 好吧......

从技术上讲,问题在于它使用 - 代码 - ZERO SENSE来运行写异步。完全没有。不需要真正的建议 - 任何重构都取决于我们从您的代码片段中不知道的情况。只是 - 如果写入是asyn,那么显然不应该在AddBytesAndSave方法中关闭编写器。