3
작업에서 압축 해제를 실행하는 방법이 있습니다. 이제 작업 취소 기능을 원합니다. 내가 전화 할 때 그러나 Cancel()
방법의 모든 것을 즉시 중단 할 것 영원히 while
실행 : 나는 args.Cancel = _cancelExtraction;
에 브레이크 포인트를 설정 한DotNetZip 작업에서 추출 취소
public class OsiSourceZip
{
private const string ZipPassword = "******";
private bool _extractionDone;
private bool _cancelExtraction;
public async Task Extract(string sourceFile, string extractionDir)
{
Task extraction = Task.Run(() =>
{
using (ZipFile zipf = ZipFile.Read(sourceFile))
{
zipf.ExtractProgress += delegate(object sender, ExtractProgressEventArgs args)
{
args.Cancel = _cancelExtraction;
RaiseExtractionProgressUpdate(args);
};
zipf.Password = ZipPassword;
zipf.Encryption = EncryptionAlgorithm.WinZipAes256;
zipf.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
zipf.ExtractAll(extractionDir);
}
});
await extraction;
_extractionDone = true;
RaiseSourceInstallationCompleted();
}
public void Cancel()
{
_cancelExtraction = true;
while (!_extractionDone)
{
Thread.Sleep(500);
}
}
}
하지만 이벤트는 즉시 Cancel()
메소드가 호출 될 때 더 이상 해고되지 않습니다.