C# BackgroundWorker和删除大型文件
编写一个应用程序的一部分,用来清理任何旧文件,但其中一些文件相当大,因此我启动了一些后台人员来完成大部分工作。 我的问题是,如果我正在调用BackgroundWorker上的FileInfo对象上的file.Delete调用,并且应用程序退出:C# BackgroundWorker和删除大型文件,c#,asynchronous,backgroundworker,C#,Asynchronous,Backgroundworker,编写一个应用程序的一部分,用来清理任何旧文件,但其中一些文件相当大,因此我启动了一些后台人员来完成大部分工作。 我的问题是,如果我正在调用BackgroundWorker上的FileInfo对象上的file.Delete调用,并且应用程序退出: 该文件将发生什么情况,是否将以无效状态挂起 应用程序将挂起,还是BGWorker将保持活动状态 这个文件是无效的吗 BackgroundWorker是本例中使用的正确类吗 好的,为了解决这个问题,我已经切换到使用Thread对象。 这将创建一个前台线程
- 该文件将发生什么情况,是否将以无效状态挂起
- 应用程序将挂起,还是BGWorker将保持活动状态
- 这个文件是无效的吗
- BackgroundWorker是本例中使用的正确类吗
很抱歉给您带来麻烦。如果您只想让应用程序线程等待文件被删除,您可以将BackgroundWorker与AutoResetEvent结合使用。这一点在 (请注意,此答案还包含有关取消的其他信息) 这样,您仍然具有由BackgroundWorker公开事件的优点,例如ProgressChanged和RunWorkerCompleted
当然,创建前置线程是另一个可行的工作,因为它们会阻塞主线程直到退出。但这可能不是最优雅的解决方案 我认为后台工作人员是这种操作的正确选择。我可能无法回答您所有的问题,但这里有一些答案:没有应用程序不会因为后台工作程序运行不同的线程而挂起。一旦后台工作人员开始处理文件,我认为它可能会进入无效状态。如果您考虑过使用任务并行库,它基本上也可以做同样的事情,但要简单得多。如果您担心应用程序会意外退出,并且这些文件确实很大,您可以创建一个公开删除队列的windows服务。这实际上是您的backgroundWorker包装。如果你想删除一个文件,为什么要担心它是否会无效?或者你只是想确保它真的被删除了?只是想确保它真的消失了。我并不担心它会意外退出,但应用程序用户可能会选择退出应用程序,而不知道有文件正在被删除。我希望它尽可能透明。