在使用 System.IO.Compression.ZipArchive 这个类处理zip文件的时候发现一个问题。
比如现在需要new一个新的对象,
System.IO.Compression.ZipArchive ziparchive = new System.IO.Compression.ZipArchive(streamWithWrongData);
new它的时候,如果传入的流,数据不正确(比如文件损坏,或数据被修改了啥的。)它会卡在new 这里,
并且一直从流的末尾向前读,一直读,不会停下来,直到内存溢出。
试过在处理这个zip文件的线程里自己抛出异常来终止掉线程,结果没用,它继续读,
之后在那个线程里 用 AutoResetEvent.WaitOne 来阻塞住,但是。。。根本挡不住啊,
依然在读,貌似 ZipArchive 的 new 是用了另外的线程来处理的。
这可就麻烦了,这里卡住了怎么办?
照理说,读一小部分信息后就应该知道,这压缩档里的数据是错误的,就应该抛出异常来的,但事实上它就是没有,只是不停的向前读取。
难道就只有退出程序了?