お世話になっております。
【環境】
作業マシン:WINDOWS Server2008 (仮想)
開発ツール:VWD2010(VB)
使用DB:SQLServer2008R2
Webフォームにてアプリを開発しております。
ASP.NET VBでの開発の経験はおおよそ4ヶ月程です。
【質問内容】
コマンド実行し、その際プロンプトに表示される結果文字列を、
下記を参考に取得しています。
http://dobon.net/vb/dotnet/process/standardoutpu …
実行しているのは処理終了までに5分くらい掛かるexeで、
10秒毎に現在の処理進捗率を吐きます。
ですが現在はプロセスが終了するまで結果の参照ができません。
参考URL先にあります、
[プロセス名].StandardOutput.ReadToEnd
この取得方法ではプロセスの終了まで待たねばなりません。
完了していないプロセスのoutput を参照するには
どのようにすればよいのでしょうか。
何卒ご教授下さい。
No.2ベストアンサー
- 回答日時:
todo36様
ありがとうございます。
プロセスの終了を待たない、という点で
以前に相談した質問と同じ考え方が出来たのですね。
今回は(リンク先スレッドで教えて頂いた)3番の方法、
非同期のスレッドを立てる方法で実現が出来ました。
1.メインスレッドでExeを実行。
2.リダイレクト処理を続けるサブスレッドを作成し、
リダイレクトされた内容をOutputreadlineで1行ずつ取り
セッション変数 (session("templog")) に格納。
3.メインスレッド側は定期的に session("templod") を参照し、画面を更新。
4.Exeを実行したプロセスが終了していたら、画面更新を終了
と、いったコードを書くことで、
目的である未完了のプロセスのリダイレクト表示
(現在実行中であることと、その進度の表示)を得る事ができました。
ありがとうございました。
No.1
- 回答日時:
>参考URL先にあります、
>[プロセス名].StandardOutput.ReadToEnd
>この取得方法ではプロセスの終了まで待たねばなりません。
>完了していないプロセスのoutput を参照するには
>どのようにすればよいのでしょうか。
StandardOutputプロパティのReadToEndメソッドではなく、
BeginOutputReadLineメソッドで非同期読み込みにしてみてはどうでしょうか?
使い方に関しては…
http://msdn.microsoft.com/ja-jp/library/system.d …
の解説を。
この回答への補足
ご報告です。非同期でのリダイレクト取得が出来ました。
ありがとうございます。しかし、実は根っこの目的というのが
>処理終了までに5分くらい
>10秒毎に現在の処理進捗率を吐きます
このプロセスの現在の進捗を定期的に画面に表示
することなのです。
Outputreadlineの中身をセッションに持てば、
後は定期的に格納先の変数をみればよい、
と、考えて居たのですが画面を1度でも返した時点で
サーバーコントロールも終了してしまい、
続きを取得・表示することは出来ませんでした。
この目的を果たすためには、何か他の方法を考える必要がありそうです。
ありがとうございます。
少々難しく、未だ目的を果たすコードはかけておりませんが、
リンク先の解説やサンプルを参考に試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- 英語 英語の相の種類 Wikipediaでは He began to talk.(起動相) He cont 1 2023/06/26 11:54
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
非表示になったエクセルは?
-
explorer.exeが異様にメモリを食う
-
Process.Startの戻り値を後で取得
-
ウィンドウのタイトルからプロ...
-
DLLにおいて、最後のプロセスデ...
-
Linuxでのスレッド間メッセージ...
-
シェルで親プロセス終了時に子...
-
ADOでアクセスのレコードに...
-
共有メモリの同時アクセスにつ...
-
タスクマネージャーのプロセス...
-
C#でのbatファイル実行結果取得
-
プロセスのアタッチ・デタッチ...
-
子プロセスの状態を親プロセス...
-
親子プロセス間でのデータの受...
-
プロセスIDの取得方法について
-
C++のプログラムをバックグラウ...
-
プロセスIDからプロセスの有無...
-
vb.netでEXCEL起動がうまくでき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
VB6.0 SHELLで起動...
-
C#でのbatファイル実行結果取得
-
プロセスのアタッチ・デタッチ...
-
プロセスIDからウィンドウハ...
-
プロセスIDの取得方法について
-
popen について
-
C++のプログラムをバックグラウ...
-
非表示になったエクセルは?
-
Windowsでのfork方法
-
別のプロセスの関数を呼び出す...
-
sleep関数の精度について
-
Visual C++からpingを実行して...
-
ADOでアクセスのレコードに...
-
C++でシェルを起動
-
SendMessageが失敗するときがある
-
ウィンドウのタイトルからプロ...
-
OSPFでプロセスを分ける意義に...
おすすめ情報