【发布时间】:2014-07-14 13:01:59
【问题描述】:
我创建了一个带有进程的应用。如果用户在进程繁忙时尝试关闭表单,则会提示他们并询问他们是要等待还是结束。如果他们选择等待,则在 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
我已尝试在我的表单关闭子中删除该文件,但 BGW 仍然可以访问,并且我有一个异常,即该文件正在使用中。因此,要么我需要终止 BGW,要么能够在表单关闭之前删除正在使用的文件。有人可以帮忙吗?谢谢。
【问题讨论】:
-
要取消的代码在哪里,或者这就是您要查找的代码?
-
这就是我要找的。我已经在使用 BGW.CancelAsync() 来提高 BGW 中的取消标志并在当前循环后退出。但是要强行退出,如果要关闭程序,也许不要等待很长的zip。现在我知道 me.close() 会做到这一点...但是如果正在进行压缩,我希望有机会删除没有用的不完整的压缩文件。有什么想法吗?
-
感谢您的回复。反正我还没用过catch,直到现在。但这只是允许程序在无法删除时无异常关闭,但我需要实际删除文件。
-
因为 ZipFile 的粒度显然是目录,所以你有点卡住了。这可能是在替换 Lib 中寻找的东西 - 一种指定某些文件的方法,这样您就可以一次提供几个文件并在两者之间寻找取消标志。不过你是对的,直到应用程序结束你/NET/ZipFile 类已经打开并且你不能删除它。也许您可以从临时文件夹中工作并将成品移动到所需的位置;在启动时,您会删除那里的所有旧残余。
标签: vb.net multithreading backgroundworker