【发布时间】:2018-02-21 00:20:34
【问题描述】:
我有一个线程:
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) 文件的内容。这将是一个理想的解决方案。)
【问题讨论】:
-
杀死线程不是一个好主意,因为它不会释放资源。我建议使用一些维护的 .NET 组件,它没有此类错误并且您可以在哪里获得支持。
-
另外,一般来说,不要开始自己的线程。 stackoverflow.com/questions/684640/…
标签: c# multithreading zip gzip block