Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 强制后台工作人员结束_Vb.net_Multithreading_Backgroundworker - Fatal编程技术网

Vb.net 强制后台工作人员结束

Vb.net 强制后台工作人员结束,vb.net,multithreading,backgroundworker,Vb.net,Multithreading,Backgroundworker,我已经创建了一个带有进程的应用程序。如果用户试图在流程繁忙时关闭表单,系统会提示用户是否等待或结束。如果他们选择等待,则会在BGW中设置并选中一个取消标志,该标志将在当前任务结束后结束 问题是如果他们还想结束,该如何处理。我的过程是压缩文件。如果进程在一个大的zip上,用户不想等待,那么我需要杀死BGW,然后清理,即删除不完整的zip文件。我写了这样一篇文章: Else ' If cancel selected... ' Forces backup to end. ??

我已经创建了一个带有进程的应用程序。如果用户试图在流程繁忙时关闭表单,系统会提示用户是否等待或结束。如果他们选择等待,则会在BGW中设置并选中一个取消标志,该标志将在当前任务结束后结束

问题是如果他们还想结束,该如何处理。我的过程是压缩文件。如果进程在一个大的zip上,用户不想等待,那么我需要杀死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

我已尝试在我的form close sub中删除该文件,但BGW仍具有访问权限,我有一个例外,该文件正在使用中。因此,要么我需要杀死BGW,要么在表单关闭之前删除正在使用的文件。有人能帮忙吗?谢谢。

如果过程完成,您可以声明一个返回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

要取消的代码在哪里?或者这就是您要查找的代码?可能是我要查找的代码的副本。我已经在使用BGW.CancelAsync来提升BGW中的cancel标志,并在当前循环之后退出。但是要强制退出,如果您想关闭程序,可能不需要等待很长时间。现在我了解我了。克洛斯会做到的。。。但是如果一个zip正在进行中,我希望有机会删除不完整的没有用的zip文件。有什么想法吗?谢谢你的回复。反正到现在为止,我还没用过catch。但这只允许程序在无法删除时无一例外地关闭,但我需要实际删除文件。因为ZipFile的粒度显然是目录,所以您有点卡住了。这可能是需要在替换库中查找的内容—一种指定某些文件的方法,这样您就可以一次提供几个文件,并在其间查找cancel标志。但是你是对的,直到应用程序结束,你/NET/ZipFile类打开了它,你将无法删除它。也许你可以从一个临时文件夹工作,将成品移动到所需的位置;启动时,您将删除任何旧的遗留物。