TBH I don't remember 100% but I'm pretty sure CharacterFreeze will stop them dead, but once you unfreeze them they will immediately resume what they were doing.
CharacterFreeze has some problems though like a player cannot initiate dialog with the NPC any longer. Also I believe it stops the default dialog animations like boast,thankful, and such.
Just as a side note, freezing the player is extremely dangerous and potentially gamebreaking.
The alternative to freezing them is to flush their queue. There are two calls for this:
CharacterPurgeQueue
CharacterFlushQueue
I have no idea what the difference is, they have always worked interchangeably for me.
If you are only using the story editor then purge/flush will work fine provided some global thing doesn't trigger another action after you purge them.
The problem with those calls though is if you have any sort of systemic behavior purging the queue won't stop that for long. This is especially true if you are using anything charscript.
To solve this problem with my own charscripts I usually use the Statemanager.
You could alternatively use this call to stop charscript functions:
CharacterSetReactionPriority(CHARACTER Character, STRING Reaction, INT Priority)
The problem with that one is you have to keep track of all the different names you gave to the reactions. And if you are using larian charscripts like wander or patrol or something, well Larian has goofy names for their stuff to put it mildly.
My tutorial on the statemananger:
http://larian.com/forums/ubbthreads.php?ubb=showflat&Number=567495#Post567495