Мой файл заблокирован из-за потока и не прерывается даже после его отмены - PullRequest
0 голосов
/ 23 октября 2019

Я пытался прервать поток и удалить файл, но файл все равно выдает мне сообщение о том, что он используется другим процессом. После прерывания потока он продолжает проходить через блок catch, и я увидел в Microsoft документ, в котором говорится, что он не должен переходить в конец каждого блока catch, если вы выполняете сброс. Аборт, процесс прерывания будет отменен, то есть файлвсе еще будет процесс, который использует его. Есть ли способ, которым я могу прервать свою ветку перед тем, как закрыть приложение и удалить файл? if (! task.IsCompleted) {

                    Thread t1 = Thread.CurrentThread;

                    if (Thread.CurrentThread.Name == null)
                    {
                        Thread.CurrentThread.Name = "Action_Thread";
                    }

                    try
                    {
                        t1.Abort("Aborted");
                    }
                    catch(ThreadAbortException ex)
                    {
                        Debug.WriteLine(ex.Message);
                    }
                    finally
                    {
                        Debug.WriteLine("Thread now being aborted");
                    }
               File.Delete("somefile.txt");

1 Ответ

0 голосов
/ 23 октября 2019

Большинство платформ автоматически закрывают дескрипторы файлов только при выходе из процессов, а не отдельные потоки, поэтому перед закрытием потока необходимо закрыть или разблокировать файл (или его дескриптор).

Как это будет сделано, и может ли это быть сделано автоматически при прерывании потока или требует, чтобы логика прерывания явно вызывала операцию закрытия, зависит от используемой платформы или языковой среды.

...