问题描述
我想将程序的所有控制权交给事件处理程序(ConsoleCancelEventHandler)。但是,一旦我在 Globals.object1.runprocess() 正在执行时通过 CTRL-C 终止整个程序,流程就会按预期进入事件处理程序,但主进程会继续处理 object1,然后处理程序才能从中检索信息对象 1。处理程序中的 try catch 块在检查 object1.Status 时可以正常工作,因为可以看到在状态可用之前抛出的异常。此代码仅在我在调试模式下运行时才能正常工作,或者如果我添加了正确的延迟在 Globals.object1.runprocess() 之后,我在该延迟内终止了程序。我如何确保流程仅在处理程序内的进程上而不是在主进程上继续?
using System;
using ownlibraryfoo;
public static class Globals
{
public static foo_type object1;
}
class sample_cs
{
static void Main(string[] args)
{
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
try {
Globals.object1.initialize();
Globals.object1.runprocess();
Globals.object1.dispose();
} catch (fooException e) {
Console.WriteLine("Error code SSSSSSSSSSSSSSSS: " + e.ErrorCode + ". " + e.Message);
}
return;
}
static void Console_CancelKeyPress(object sender,ConsoleCancelEventArgs e)
{
Console.WriteLine("Program Terminated Manually");
e.Cancel = true;
Globals.object1.Terminate();
bool tryAgain = true;
/* query solve status until available and handle exception when not available */
while(tryAgain)
{
try
{
if (Globals.object1.Status == FOOINTERRUPTEDSTATUS)
{
Console.WriteLine(" OBJECTIVE = " + Globals.object1.internalattribute);
}
tryAgain = false;
}
catch (FooException f)
{
/* the error output is optional */
Console.WriteLine("Object1 Error code = " + f.ErrorCode);
Console.WriteLine(f.Message);
}
}
Environment.Exit(0);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)