Было бы опасно вызывать Abort для метода потока, который происходит внутри делегата, вызываемого с Delegate.BeginInvoke.
Delegate.BeginInvoke запускает делегата в потоке ThreadPool. Завершение потока ThreadPool через Abort может привести к появлению очень странных ошибок, так как ThreadPool не предназначен для этого.
Это, как говорится, также совершенно ненужно. Вы всегда должны быть в состоянии определить из потока ThreadPool, хотите ли вы прервать выполнение, и просто вернуться соответствующим образом. Если поток ThreadPool блокируется, это также не будет проблемой, так как он не блокирует ваш основной поток. Было бы лучше просто поставить чек после вашего блокирующего вызова (т.е. сразу после File.Exists
) и просто вернуться, если вы хотите прервать в это время.