Похоже, что обработка завершения процесса могла вызвать ошибку приложения. Таким образом, приложение могло быть прекращено. Можете ли вы поставить правильный блок try..catch и отладку, чтобы увидеть, что происходит не так. Или прокомментируйте
линия
newCrawler.Exited += new EventHandler(newCrawler_Exited);
and see what happens.
Пожалуйста, попробуйте следующий код (это из MSDN), также не забудьте передать один аргумент (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]);
}
}
Одна вещь, которую я заметил, это то, что если вы не передадите имя файла в качестве параметра, это приведет к сбою процесса, но приложение все еще не повреждено (поскольку исключение обрабатывается внутри процесса).
Если вы не передадите имя файла, приведенный выше код завершится сбоем из-за
myPrintProcess.PrintDoc (арг [0]);
выбросит исключение из самого основного процесса.
Я пытался создать исключение в обработчике выхода, в то время приложение (основной процесс) также зависало.
Вы можете попробовать комментировать код в обработчике выхода?