A common pattern is to have a non-virtual method that will do what you want to call the virtual method. Subclasses may override the internal method to change functionality, but the public method may not be virtual, always raising the event first.
public class Foo
{
public SomeHandler OnBar;
public void Bar()
{
if (OnBar != null)
{
OnBar(this, EventArgs.Empty);
}
BarImpl();
}
protected virtual void BarImpl()
{
}
}