微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#为什么在信号处理程序捕获外部事件后主进程会继续?

如何解决C#为什么在信号处理程序捕获外部事件后主进程会继续?

我想将程序的所有控制权交给事件处理程序(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 举报,一经查实,本站将立刻删除。