Recently I have been debating on the best way to handle communication up the chain in n-tier architecture.
Currently the methods I am doing is throwing and handling exceptions between layers for errors, and using events/delegates for other communication (to update progress bars and such). Are these the best way or is there another method that I have overlooked that would be considered better practice?