The problem is that your Backgroundworker is not busy just because you call the timerTick method. Therefore this code is never reached before the rest of the method runs through and the form gets closed and the application closes:
while (PublishBackgroundWorker.IsBusy)
System.Threading.Thread.Sleep(100);