我有一个主应用程序,它通过Process组件调用另一个控制台应用程序。我已经通过自定义实现Job Objects(代码中类名为'Job')在控制台应用程序上设置了内存限制
只要超过内存限制,就会抛出OutofMemory异常或发生KERNELBASE.DLL错误。但是我无法在主应用程序或控制台应用程序中捕获此异常。
如何处理呢?
在控制台应用程序中处理全局异常无效。
主应用程序具有以下代码
private void startProcess()
{
try
{
Process proc = new Process();
proc.StartInfo.FileName = @"E:\App\console.exe";
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.OutputDataReceived += Proc_OutputDataReceived;
proc.ErrordataReceived += Proc_ErrordataReceived;
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
Job job = new Job(_maxmemory);//memory limit set for child process
job.AddProcess(proc.Id);//for the above console
proc.WaitForExit();//this is called on a thread.
}
catch (Exception ex)
{
}
}
控制台应用程序具有以下代码
static void Main(string[] args)
{
System.AppDomain.CurrentDomain.UnhandledException += CatchUnhandledException;
}
static void CatchUnhandledException(object sender,UnhandledExceptionEventArgs e)
{
Console.Error.WriteLine(e.ExceptionObject.ToString());
}
如何在主应用程序或控制台中处理此内存限制异常?