アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.NETですが、
趣味でアプリケーションを作成しています。
下記のコードで処理を実行させています。

Call Shell("C:\aaa.exe c:\test.txt c:\test2.txt", AppWinStyle.Hide)

(A)

Dim sr As New System.IO.StreamReader("c:\test2.txt", System.Text.Encoding.Default)
Dim sb As New System.Text.StringBuilder(CInt(Microsoft.VisualBasic.FileSystem.FileLen("c:\test2.txt") * 1.1))

'ファイルの最後までループ
Do Until sr.Peek = -1
sb.Append(sr.ReadLine & vbCrLf)
Loop
sr.Close()


"aaa"はtest.txtを加工してtest2.txtとして出力するプログラムです。
その後、test2を最後まで読み出しているのですが、
どうもプログラムaaaが処理を終了する前に
次の読み出し処理に移ってしまっているようなのです。
そこで、素人なりに上記(A)の部分に

For i = 0 To 2000000000
Next
For i = 0 To 2000000000
Next

とForループを加えて時間稼ぎしているのですが、
状況によって時間稼ぎがうまくいかない場合があります。どのように問題を回避すべきでしょうか?
aaaはDLLでも組み込み可能になっているプログラム
なのですがDLLで実行させると何らかのメリット
があるのでしょうか?
その点を教えていただけると助かります。
回答よろしくお願いいたします。

A 回答 (4件)

Dim hProc As System.Diagnostics.Process



'プロセス作成
hProc = System.Diagnostics.Process.Start("C:\aaa.exe c:\test.txt c:\test2.txt")
'プロセス終了待機
hProc.WaitForExit()
hProc.Close()
hProc.Dispose()

Dim sr As New System.IO.StreamReader("c:\test2.txt", System.Text.Encoding.Default)
Dim sb As New System.Text.StringBuilder(CInt(Microsoft.VisualBasic.FileSystem.FileLen("c:\test2.txt") * 1.1))

'ファイルの最後までループ
Do Until sr.Peek = -1
sb.Append(sr.ReadLine & vbCrLf)
Loop
sr.Close()

これでどうでしょうか。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
お返事遅れました。
プロセスの終了まで待機すればよいわけですね。
プログラムの動作確認ができました。
ありがとうございます。

お礼日時:2005/04/24 11:00

shell関数の第3引数が省略されていると、終了を待ちません


trueを指定すると終了を待つようになります。
呼び出したプログラムがハングアップする可能性がある場合には、第4引数でタイムアウト時間をミリ秒で指定することができます。(integerの範囲で)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お返事遅れました。
第3引数があるとは思いませんでした。
動作確認したところうまくいきました。
ありがとうございます。

お礼日時:2005/04/24 11:05
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お返事遅れました。
#1さんの方法と同じ方法ですね。
プロセスの終了まで待機すればよいわけですね。
ありがとうございます。

お礼日時:2005/04/24 11:03

VBはVer6までしか触ってないので、.NETでどうなるかは自信がありませんけど。



同期/非同期の問題ですね。
shellは、確かに結果を待たずに次行を実行します。

そのため、結果を待つ処理が必要になります。

このカテゴリで「同期」で検索してみてください。
下記、過去問の#2さんの回答が適用できそうに思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=325703
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お返事遅れました。
VB6の方法のように思いますが、、、、。
よくわかりませんでしたので、
動作確認してません。
でもありがとうございました。

お礼日時:2005/04/24 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A