我应该什么时候不使用.NET中的线程池?
看起来最好的选择是使用ThreadPool,在这种情况下,为什么它不是唯一的选择?
你有什么经历?
我有一个帖子:
void threadCode(object o)
{
doStuffHere(o); // Blocking call. Sometimes hangs.
}
Run Code Online (Sandbox Code Playgroud)
而我这样称呼它:
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)
}
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET Zip Library并且调用ZipFile.CommitUpdate()大部分时间都可以工作,但有时只是挂起.我不知道为什么,我在文档中看不到任何指示为什么会发生这种情况的内容.一个不超过5-10秒的小文件有时会在那里停留超过5分钟但没有进展.进程资源管理器中的I/O图表显示该进程不是读取或写入,并且没有CPU使用情况.基本上,如果发生这种情况,我想CommitUpdate()在放弃之前杀死并再试一次或两次.
知道如何杀死阻塞调用中的线程吗?
(或者 - 那些有这个zip库经验的人:你知道为什么有时会挂起一些文件吗?我正在修改.docx和.pptx(GZip)文件的内容.这将是一个理想的解决方案. )
我正在编写一个应用程序并且想知道,VB中是否存在一个常规(或类似的)功能?
在我的应用程序中,它从互联网上提取图片并且需要相当长的时间(30-45秒)并且它会阻止所有代码运行.以下是拉动该图片的代码行:
PictureBox1.Image = Image.FromStream(System.Net.HttpWebRequest.Create("http://www.example.com/avimgs/" & Username.Text & ".gif").GetResponse().GetResponseStream())
Run Code Online (Sandbox Code Playgroud)