强制背景工作者结束

时间:2014-07-13 20:36:06

标签: vb.net multithreading backgroundworker

我已经创建了一个包含流程的应用。如果用户在进程繁忙时尝试关闭表单,则会提示他们并询问他们是否要等待或结束。如果他们选择等待,那么在BGW中设置并检查取消标志,这将在当前任务之后结束。

问题是如何处理他们是否还想结束。我的过程是压缩文件。如果进程是大拉链并且用户不想等待,那么我需要杀死BGW然后清理,即删除不完整的zip文件。我写过:

Else
    ' If cancel selected...
    ' Forces backup to end.
     ???
     ' Deletes incomplete backup.
     If My.Computer.FileSystem.FileExists(currentBackup1) Then
         My.Computer.FileSystem.DeleteFile(currentBackup1)
     End If
End If

我尝试在我的表单close sub中删除该文件,但BGW仍然可以访问,我有一个例外,即文件正在使用中。因此,我需要杀死BGW或者能够在表单关闭之前删除正在使用的文件。有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:0)

如果进程完成,您可以声明一个返回true的变量。所以你可以试试这个

Public Class MainForm
Public IsComplete As Boolean = False

Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    ' Your code comes here
    IsComplete = True
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    If IsComplete Then
        MsgBox("Completed successfully")
    Else
        If My.Computer.FileSystem.FileExists(currentBackup1) Then
            My.Computer.FileSystem.DeleteFile(currentBackup1)
        End If
    End If
End Sub 
End Class