Scheint so, als hätte die Prozess-Exit-Behandlung den Anwendungsfehler verursacht. Also könnte die Anwendung beendet sein. Kannst du einen richtigen Versuch machen..catch block und debugg um zu sehen, was schief läuft. Oder kommentieren Sie die Linie
newCrawler.Exited += new EventHandler(newCrawler_Exited);
and see what happens.
Bitte versuchen Sie folgenden Code (Dies ist von MSDN), auch nicht vergessen, ein Argument übergeben (Filename)
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]);
}
}
Eine Sache, die ich bemerkt, wenn Sie Übergeben Sie den Dateinamen nicht als Parameter, das führt zum Absturz des Prozesses, aber die Anwendung ist intakt (Da die Ausnahme innerhalb des Prozesses behandelt wird).
Wenn Sie den Dateinamen nicht übergeben, stürzt der obige Code ab, weil myPrintProcess.PrintDoc (args [0]); löst Ausnahme vom Hauptprozess selbst aus. Ich habe versucht, ein Extintin in der Exit-Handler zu erstellen, zu dem Zeitpunkt auch die Anwendung (Hauptprozess) abgestürzt.
können Sie versuchen, den Code im Exit-Handler zu kommentieren?
Danke, aber ich muss das Exit-Ereignis verwenden, weil ich die Anwendung nicht blockieren will, bis der Prozess existiert – Ehsan
Ok, aber wer hält den Hauptprozess (Ihre Konsolenanwendung) noch läuft? Sie sagen, dass es beendet wird ... –
Ich habe ManualResetEvent verwendet, um zu verhindern, dass die Hauptkonsolenanwendung beendet wird. – Ehsan