捕获异常后阻止控制台应用程序关闭

时间:2013-06-21 09:57:38

标签: c#

我使用SmartIrc4Net在C#中编写了一个IRC机器人,机器人的目的是在识别命令时提供信息。

我的问题是,代码中会出现异常导致应用程序关闭但是可以保持应用程序运行而不会出现任何“按任意键继续”消息。理想情况下,这应该只记录异常并继续。

我知道我可以首先管理异常但是在每个命令的基础上验证所有输入将花费很长时间。或者甚至可能还有其他我可能没有涉及的例外。

static void Main(string[] args)
{
    IrcClient bot = new IrcClient();

    // attach events

    try
    {
        // connect to server, login etc

        // here we tell the IRC API to go into a receive mode, all events
        // will be triggered by _this_ thread (main thread in this case)
        // Listen() blocks by default, you can also use ListenOnce() if you
        // need that does one IRC operation and then returns, so you need then
        // an own loop
        bot.Listen();

        // disconnect when Listen() returns our IRC session is over
        bot.Disconnect();
    }
    catch (ConnectionException e)
    {
        Console.WriteLine("Couldn't connect! Reason: " + e.Message);
        Console.ReadLine();
    }
    catch (Exception e)
    {
        Console.WriteLine(">> Error: " + e);
    }
}

3 个答案:

答案 0 :(得分:2)

将您的程序包裹在while(true)块中。

static void Main(string[] args)
{
    while(true){
        IrcClient bot = new IrcClient();

        // attach events
        try
        {
            // connect to server, login etc

            // here we tell the IRC API to go into a receive mode, all events
            // will be triggered by _this_ thread (main thread in this case)
            // Listen() blocks by default, you can also use ListenOnce() if you
            // need that does one IRC operation and then returns, so you need then
            // an own loop
            bot.Listen();

            // disconnect when Listen() returns our IRC session is over
            bot.Disconnect();
        }
        catch (ConnectionException e)
        {
            Console.WriteLine("Couldn't connect! Reason: " + e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine(">> Error: " + e);
        }
    }
}

答案 1 :(得分:0)

  

异常可能在导致应用程序的代码中发生   关闭但是可以保持应用程序运行而不是   任何“按任意键继续”消息即可显示。

嗯......是的,你可以用这种方式编写你的应用程序,但我几乎可以保证它不是你想象的那么简单。抛出异常时,出现了错误。无论如何,你都不会耸耸肩膀并且继续进行神奇的修复,所有这些都可能导致更多的事情出错。

想象一下,您有代码打开文件,然后对该文件的内容执行某些操作,然后向用户显示一些结果。如果该文件不存在,则抛出异常。如果你只是捕获异常,什么也不做,然后继续“对文件内容做一些事情”代码...祝贺,现在你有更多的例外来处理,因为没有内容文件的。你再次耸耸肩,继续“显示结果”代码...并祝贺,但更多例外,因为没有结果!

没有懒惰的出路。捕获特定的异常,并适当地处理它们。是的,这需要更多的努力。是的,需要更多代码。是的,您将不得不考虑在每个案例中“适当处理”的含义。这是编程。

答案 2 :(得分:0)

你应该试试这个

static void Main(string[] args)
{
    bool shouldStop=false;
    while(!shouldStop){
        IrcClient bot = new IrcClient();
        shouldStop=true;

        // attach events
        try
        {
            // connect to server, login etc

            // here we tell the IRC API to go into a receive mode, all events
            // will be triggered by _this_ thread (main thread in this case)
            // Listen() blocks by default, you can also use ListenOnce() if you
            // need that does one IRC operation and then returns, so you need then
            // an own loop
            bot.Listen();

            // disconnect when Listen() returns our IRC session is over
            bot.Disconnect();
        }
        catch (ConnectionException e)
        {
            Console.WriteLine("Couldn't connect! Reason: " + e.Message);
            shouldStop=false;
        }
        catch (Exception e)
        {
            Console.WriteLine(">> Error: " + e);
            shouldStop=false;
        }
    }
}