0

クラスでストリーミングバイトを再生し、Playerクラスでファイルにバイトを書き込むエンジンクラスがありますStreamWriter

複数のエンジンと複数のプレーヤー/ライターを持つことができます。

ファイルを閉じる必要があるまで、すべて正常に動作します。私が閉じると言うとき、私はウェーブヘッダーを追加して何らかの操作を行うことを意味し、次にライターを破棄し、新しいライターを開いてバイトを書き込みます。

私の問題は、ファイルが小さい場合は問題ありませんが、ファイルが大きい場合(数Mb)は、ファイルを閉じる前にライターがnullになることです。どうすればこれを回避できますか?

いくつかのコード: 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メソッドは、非同期で実行されている操作を開始する要求を送信します。したがって、ライターは終了する前に破棄/nullになります。

このようにできる、

   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

明らかに、または?配列が大きくなると、物理的に書き込むのに時間がかかり、待たないので-まあ...

技術的に問題なのは、コードから書き込み非同期を実行するためにゼロセンスを作成することです。まったくありません。実際のアドバイスは必要ありません。リファクタリングは、コードスニペットからわからない状況によって異なります。ただ-書き込みがasynの場合、明らかに、ライターはAddBytesAndSaveメソッドで閉じられるべきではありません。

于 2013-01-15T08:39:33.883 に答える