プロセス出口処理のように見えますが、アプリケーションエラーが発生している可能性があります。したがって、アプリケーションは終了する可能性があります。適切なtry..catchブロックとdebuggを入れて、間違っていることを確認できますか?または(これはMSDNからです)、また、あなたならば、私は気づいたことの一つは、ある一つの引数(ファイル名)
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Threading;
using Microsoft.VisualBasic;
class PrintProcessClass
{
private Process myProcess = new Process();
private int elapsedTime;
private bool eventHandled;
// Print a file with any known extension.
public void PrintDoc(string fileName)
{
elapsedTime = 0;
eventHandled = false;
try
{
// Start a process to print a file and raise an event when done.
myProcess.StartInfo.FileName = fileName;
myProcess.StartInfo.Verb = "Print";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
}
catch (Exception ex)
{
Console.WriteLine("An error occurred trying to print \"{0}\":" + "\n" + ex.Message, fileName);
return;
}
// Wait for Exited event, but not more than 30 seconds.
const int SLEEP_AMOUNT = 100;
while (!eventHandled)
{
elapsedTime += SLEEP_AMOUNT;
if (elapsedTime > 30000)
{
break;
}
Thread.Sleep(SLEEP_AMOUNT);
}
}
// Handle Exited event and display process information.
private void myProcess_Exited(object sender, System.EventArgs e)
{
eventHandled = true;
Console.WriteLine("Exit time: {0}\r\n" +
"Exit code: {1}\r\nElapsed time: {2}", myProcess.ExitTime, myProcess.ExitCode, elapsedTime);
}
public static void Main(string[] args)
{
// Verify that an argument has been entered.
if (args.Length <= 0)
{
Console.WriteLine("Enter a file name.");
return;
}
// Create the process and print the document.
PrintProcessClass myPrintProcess = new PrintProcessClass();
myPrintProcess.PrintDoc(args[0]);
}
}
に合格することを忘れないでくださいコードを、次の試してみてください ライン
newCrawler.Exited += new EventHandler(newCrawler_Exited);
and see what happens.
コメントファイル名をパラメータとして渡していないため、プロセスがクラッシュする可能性がありますが、アプリケーションはそのままです(プロセス内で例外が処理されるため)。
ファイル名を渡していない場合、上記のコードは、 myPrintProcess.PrintDoc(args [0]);で破損します。 は、メインプロセス自体から例外をスローします。 Exitハンドラ内にexceptinを作成しようとしましたが、その時点でアプリケーション(メインプロセス)もクラッシュしました。
Exitハンドラ内のコードにコメントすることはできますか?
ありがとう、Exitイベントを使用する必要があります。プロセスが存在するまでアプリケーションをブロックしたくないからです。 – Ehsan
いいえ、メインプロセス(コンソールアプリケーション)は引き続き実行していますか?あなたはそれが終了すると言います... –
私はManualResetEventを使用して、メインコンソールアプリケーションが終了しないようにしました。 – Ehsan