0

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

我可以拥有不止一个引擎和不止一个玩家/作家。

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

我的问题是,当文件很小时它可以,但是当文件较大(几 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);
}
4

2 回答 2

1

您已触发异步调用。RunWorkerAsync 方法提交请求以启动异步运行的操作。因此,您的作家在完成之前被处置/为空。

可以这样,

   private void writrToFileWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
      // code to add (after the asynchronous call is completed)
       writer.Dispose;
       writer = null;         
  }
于 2013-01-15T08:51:20.227 回答
0

显然,或者?当数组更大时,物理写入需要更多时间,而且您无需等待 - 好吧......

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

于 2013-01-15T08:39:33.883 回答