- ベストアンサー
大量データコピー中に他の処理をさせたい
VBでフォルダーをコピーするプログラムをつくりましたが、フォルダのコピー中は他のプログラムでの表示の更新処理などができません。うまく他のプログラムにも制御がいくような良い方法はないでしょうか? コピーはFileSystemObject.CopyFolder で実行しています。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
SHFileOperationはどうでしょう? エクスプローラのコピペと同じように、"コピーしています"の画面が表示されます。 呼出側が真っ白になることはないようです。
その他の回答 (3)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
さらに、こちらから質問です。 >大量データコピー中に他の処理をさせたい 他の処理とは主にどのようなことですか? ただ、進捗状況を表示したいだけですか? 僕の経験上、大量データ処理最中に、別プロセスを極力働かさないように設計することが多いのですが・・・ 同時に行いたい処理が何なのかが知りたいです。
お礼
度々ありがとうございます。 やりたいのはA.EXEでメニュー画面を表示。 メニュー画面には・データコピー・データグラフ表示等のボタンがある。 データコピークリック時にはB.EXEでデータをコピーする。 コピー中でもA.EXEのメニューからデータグラフ表示を行う。といったかんじです。 AutoRedraw=falseだったのでtrueにしてもだめでした。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
「現在コピー中です」と表示させているのは、どちらのEXEですか? メインのEXEを「A.EXE」 コピーを実際に行っているEXEを「B.EXE」 としたとき、どちらのEXEでしょうか? もしA.EXEなら、フォームのプロパティ[AutoRedraw]はTrueになってますか? もし、B.EXEならプロセス監視が必要かも? どちらも未検証です。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
CopyFolderはコピーを終了するまで、次の処理を行うのは不可能です。 CreateThreadで本来は行うべきなのでしょうが、VBはシングルスレッド言語なので、たぶん落ちまくるでしょう。 別プロセスにしてみてはいかがでしょう? 簡単にいうと別のEXEです。コピーをするだけの単機能EXEを用意して Call Shell("hogehoge.exe c:\Program Files\hoge\/c:\hoge\") などとして[hogehoge.exe]呼び出し、その[hogehoge.exe]でCommand関数で "c:\Program Files\hoge\/c:\hoge\" 部分を認識させて、コピーを行うだけの処理をさせたらよいのでは?
お礼
さっそくのご教示ありがとうございました。さっそく別EXEでやってみましたら、なんとか少し(さくさくは動きません)はうごいているのですが「現在コピー中です」と表示しているウィンドウの上にエクスプローラなどを表示し、最小化すると下にあった「現在コピー中です」の文字や色が消えて真っ白になってしまいます。とほほ・・ これはもうあきらめでしょうか?度々恐縮ですが、もし良い方法をご存知でしたらお教えください。
お礼
さっそくSHFileOperationなるものをMSDNでみてみました。 なんと英語!自分の力で使いこなせるかな? ありがとうございます。
補足
参考URLをみるのを忘れてました。ありがとうございます。