非同期処理でファイルにデータを書き出すには?


あざみ  2004-09-18 15:12:18  No: 85645  IP: [192.*.*.*]

WinXP,VB6 Sp6でプログラムを作っています。

質問ですが、大きいデータをファイルに書き出す場合、ファイルを書いている間
制御がプログラムに戻ってこないため、ファイルを書き出し終えるまで何の処理
もできずに待っていなければなりません。
VBでファイルを書き出しながら別の処理をするにはどのようにすればいいのでしょうか?
よろしくお願いします。

編集 削除
魔界の仮面弁士  2004-09-18 17:37:11  No: 85646  IP: [192.*.*.*]

案1) ファイルを吐いてから、別の処理を行うのではなく、
     ファイル作成と別処理とが、少しずつ交互に行われるようにする。

案2) ファイルを作成する部分だけを別のexeにして、
     それをShell関数で起動させる。

案3) VBのCD-ROM内の Coffee2.vbp プロジェクトのように、
     非同期監視するようなActiveXコンポーネントにして実行させる。

編集 削除
あざみ  2004-09-19 17:20:38  No: 85647  IP: [192.*.*.*]

魔界の仮面弁士さん回答ありがとうございます。
ファイルの作成は大きなファイルのコピーで、その進行状況を表示し
その途中でキャンセルが出来るようにしたかったのです。
案1で実現しようと思いますが、数KBずつ読んでは書くという処理を
考えています。

この間でキャンセルなどのボタンクリックを検出するにはどうすれば
いいのでしょうか?

  Dim bytDat()  As Byte
  Dim intFS     As Integer
  Dim intFD     As Integer
  Dim lngSizeS  As Long
  Dim lngPt     As Long
  Dim BufferSize As Long

  BufferSize = 64& * 1024&

  intFS = FreeFile
  Open SrcFile For Binary As #intFS
  intFD = FreeFile
  Open DstFile For Binary As #intFD
  
  lngSizeS = LOF(intFS)
  ReDim bytDat(BufferSize - 1)
  lngPt = 0
  Do While lngPt < lngSizeS
    If lngPt + BufferSize > lngSizeS Then
      ReDim bytDat(lngSizeS - lngPt)
    End If
    Get #intFS, , bytDat
    Put #intFD, , bytDat
    lngPt = lngPt + BufferSize 
  Loop
  
  Close #intFS
  Close #intFD

編集 削除