3

我有一个后台工作人员正在运行以复制一个大文件(几 GB),我想知道如何在复制过程中取消该进程。我可以在复制之前检查 CancellationPending 属性,但是当复制已经在进行中时不知道该怎么做。

if (worker.CancellationPending) // check cancellation before copy 
{   
    e.Cancel = true;
}
else
{    
    File.Copy("sourceFile", "destinationFile"); // need to cancel this
}

请指教,谢谢!

4

5 回答 5

6

我不确定,但我认为这File.Copy是由CopyFile不允许此功能的 winapi 功能支持的。

CopyFileEx每当复制文件的一部分时,您应该指出允许回调方法。

于 2010-06-14T13:55:49.087 回答
2

我知道的唯一方法是使用CopyFileEx (kernel32)

于 2010-06-14T13:56:21.083 回答
0

据我所知,后台工作人员最适合运行大量小操作。我知道这很混乱,但您可能想考虑为您的复制操作创建一个单独的线程。这样,如果您正在复制,您可以杀死线程。(我不确定这会对复制产生什么影响 - 我不知道使用这种方法是否会留下一个临时文件。)

于 2010-06-14T13:54:40.483 回答
0

分块复制文件。在块之间,检查操作是否已被取消。

这可能闻起来像轮子改造,但如果您不想 dllimport CopyFileEx,它是一个选项。

于 2010-06-14T14:02:00.277 回答
0

Instead of using File.Copy or any other copy function, you could also copy the file yourself (reading from a source stream, writing to a destination stream) in chunks. In the loop required to copy all chunks you could check whether to abort the operation and then perform necessary operations to abort the copy process.

于 2010-06-14T14:02:04.527 回答