Okay, I think I see where you're going with this now...
and I still can't help but wonder exactly why you're so
concerned about very cheap operations like a simple
variable test, when all the overhead involved in trapping
events makes those little tests pale in cmoparison. Even
the simplet event hadler operation, start to finish, will
end up generating about eight branch and link
instructions. Anyway....
You still have a number of other options. For one thing,
since you're writing the handler, you can do anything you
want with it. If you want the handler to snatch control
of your code in the middle of one fxn, and then pass
control to some point inside another fxn, you could always
create a global (or static, if you're doing this in a
class) variable "int WhereAmI" and then in fxn a() set it
to some value. When fxn b() (your event handler) takes
control, it can then call fxn c(). Fxn c() can then read
the global "WhereAmI" variable that was set to some value
by a() (or perhaps even alterd by b()... It's your
program), and can then act accordingly.
A word of caution on this though... Remember that all fxns
must termniate, and so subsequent and recursive calls to
fxns stay on the call stack. If fxn a() runs and event
handler b() runs and calls c(), remember that eventually
control is going to go back to a() to finish up whatever
it was doing before the event. Such is the nature of
event-driven programming. If that's going to pose a
problem, then you could create a fxn pointer (a delegate
fxn in C#) and then have the event handler set it. This
is how event handlers pass aruond "callback fxns", and is
actually how most event handlers work anyway. So, in a()
you could create a delegate for the signatuer of c() and
then have b() add c() to the delegate.... and back in a()
test to see if the delegate is null and if not, call
delegate().
which again takes us back to this whole discussion of
overhead. I have an inherent appreciation for yuor desire
to find the most efficient route from a to b.
Unfortunately, its a defacto standard that to fly from
Boston to New York in Windows, you'll have to change
planes in London after a quick stopover in LA.

These
days, memory and resources just aren't at a premium
anymore, so most developers don't count bits and bytes
like we used to back in the days of DOS programming. The
hard-core guys do, who write the drivers and code for
video cards and stuff like that, but they're using .asm
routines on propietary hardware. You're writing code that
has to interact with an entire framework of an operating
system, but it sure if fun to learn, isn't it?
JIM