1

我使用 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);
    }
}
4

3 回答 3

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);
        }
    }
}
于 2013-06-21T09:58:33.027 回答
0

代码中可能会发生异常,导致应用程序关闭,但是否可以保持应用程序运行并且不会出现任何“按任意键继续”消息。

嗯...是的,你可以这样写你的应用程序,但我几乎可以保证这不是你认为的简单方法。当抛出异常时,出现了问题。你不会通过耸耸肩并继续进行神奇的解决任何事情,所有可能导致的结果是更多的事情会出错。

想象一下,您有一段代码可以打开一个文件,然后对该文件的内容执行一些操作,然后向用户显示一些结果。如果文件不存在,则会抛出异常。如果你只是捕获异常,什么都不做,然后继续“对文件的内容做一些事情”代码......恭喜,现在你有更多的异常需要处理,因为没有文件的内容。你再次耸耸肩,继续“显示结果”代码……恭喜,还有更多例外,因为没有结果!

没有偷懒的出路。捕获特定的异常,并适当地处理它们。是的,这需要更多的努力。是的,它需要更多的代码。是的,您将不得不考虑在每种情况下“适当处理”的含义。那就是编程。

于 2013-06-21T11:09:31.007 回答
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;
        }
    }
}
于 2013-06-21T11:28:55.503 回答