我有一个引擎类负责与我的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);
}
答案 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方法中关闭编写器。