Hmm I once had the same problem when developing an irc client. I resolved the problem in a different way.

For each kind of function I wanted to perform I had a class that would be derived from the IrcFunctionClass. That class would have a property that would be the FunctioName and then an array of arguments.

Each of those classes had a Run(arg) method.

Then everytime I received something from the irc server my function would loop through a collection with all those classes(that before the connection have been added to the collection) and run the .Run() method.

You can even put all those classes each one in a different DLL

I hope I made myself clear