2009-08-03 5 views
2

私は基本的なGUIアプリケーションを作成していますが、これらのアプリケーションの出力はリッチテキストボックスを介してユーザーに表示されますリアルタイムでですから、基本的に私は子プロセスを実行する別個のプロセススレッドを持っています。別のスレッドでプロセスを実行するとSystem.IOが発生する__ Error.WinIOError

プロセスのほとんどは言ってクラッシュxdiscbld.exe(XboxのISOイメージの作成者ツール)を除いて、そのスレッド上で正常に動作:

Unhandled Exception: System.IO.IOException: The handle is invalid. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded) 
at System.Console.get_BufferWidth() 
at XDiscBld.XDiscBldProgram.ProcessDisc() 
at XDiscBld.XDiscBldProgram.Run(String[] args) 
at XDiscBld.XDiscBldProgram.Main(String[] args) 

は(ところで、xDiscBldは、コマンドプロンプトを経て正常に動作、または

私は通常、このような特定のエラーをポストしませんが、私は本当に困惑しています。一般的なスレッドに関する一般的な問題と、何らかのIOハンドルを持っていることが考えられます。誰かが同じような問題を経験したことがあったり、これについて何らかの洞察を持っていれば、それはうまくいくでしょう。

+0

複数のスレッドからProcessインスタンスに同時にアクセスしていますか? – DxCK

答えて

1

私は実際の問題はスレッドと関係なく、XDiscBldは存在しないコンソールウィンドウに書きたいと考えています。これは私がこのようなプロセスを開始しているからです。

process = new Process(); 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.RedirectStandardError = true; 
process.StartInfo.CreateNoWindow = false; 
process.StartInfo.FileName = FileName; 
process.StartInfo.Arguments = Arguments; 
process.StartInfo.WorkingDirectory = WorkingDirectory; 
process.Start(); 

私はちょうど

process.StartInfo.FileName = FileName; 
process.StartInfo.Arguments = Arguments; 
process.StartInfo.WorkingDirectory = WorkingDirectory; 
process.Start(); 

で実行した場合、それは動作します。だから私は出力をどのようにリダイレクトするのが好きではありません。それで、私はまだ現状のシステムを使ってこの作業をどのように行うのか分かりません。この話題は恐ろしく脱線してしまったので、私はそれを削除してやり直すか、他の人の参考にしておくべきだと思います。

+1

リダイレクトされた出力を読もうとしましたか?絶対です。 http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutputput.aspxを参照してください。 –

0

ここで起こっていることは、そのプロセスから使用しているハンドルが無効であることです。これが発生する理由はいくつかありますが、最も一般的なのは、プロセスがすでに終了してハンドルが無効になっているということです。

+1

Jared、Console.BufferWidthゲッターで失敗しているように見えるので、コンソールには不満があるハンドルだと思います。 –

1

入力/出力をリダイレクトする場合は、process.StartInfo.UseShellExecuteをに設定する必要があります。にする必要があります。

+0

私は同じことをしているが、System.Threading.Threadを使用しているので、.StartInfo – Gary

関連する問題