我有一个线程:
void threadCode(object o)
{
doStuffHere(o); // Blocking call. Sometimes hangs.
}
我这样调用它:
Thread t = new Thread(new ThreadStart(delegate()
{
threadCode(o);
}));
t.Start();
StopWatch sw = new StopWatch();
sw.Start();
while (t.IsAlive)
{
Application.DoEvents();
if (sw.EllapsedMilliseconds > myTimeout)
// Somehow kill t even though doStuffHere(o) is blocked (but hung)
}
我正在使用.NET Zip Library,并调用
ZipFile.CommitUpdate()
,大多数情况下都有效,但有时会卡住。我不知道为什么,在文档中找不到任何指定原因的信息。一个小文件应该不需要超过5-10秒,但有时会停留5分钟以上而没有任何进展。在进程资源管理器中的I/O图表显示进程没有读取或写入,并且没有CPU使用率。基本上,如果发生这种情况,我想杀死CommitUpdate()
,然后再试一两次,然后放弃。
有什么方法可以杀死被阻塞调用卡住的线程吗?
(或者-对于那些有使用此zip库经验的人:您知道为什么有时会挂起某些文件吗?我正在修改.docx和.pptx(GZip)文件的内容。这将是一个理想的解决方案。)