我想知道如何以不冻结GUI的方式运行以下循环,因为循环可能需要几分钟才能完成。谢谢。
For i = 0 To imageCount
'code
Next
答案 0 :(得分:3)
简短的回答是你在另一个线程上运行循环。很长的答案是整本书和大学的几个学期,因为它需要资源访问冲突和各种解决方法,如锁定和排队。
由于您似乎在使用VB.NET,我建议您使用最新版本的.NET框架并利用Async和Await,您可以从MSDN中了解它。
这些关键字实现了一个非常复杂的固定解决方案,可以让您在幸福无知的背后噩梦中实现目标:)
为什么有经验的并行编码器会烦恼async / await
async / await的突出特点是
带阻塞调用的线性代码易于编写且易于阅读。从维护的角度来看,它会好得多。但它提供了一个残暴的用户体验。 Async / await意味着你可以双管齐下。
这一切都建立在TPL之上;在一个非常真实的意义上,它只不过是编译器支持的TPL设计模式,这就是为什么标记为async的方法需要返回Task<>
。我非常喜欢这个,而且没有技术上的缺点。
我唯一担心的是它的所有太好,所以整整一代人都不知道他们的肩膀上的巨人有多高,正如大多数现代程序员对机制的朦胧意识一样调用堆栈中的堆栈帧(局部变量背后的魔力)。
答案 1 :(得分:2)
您可以在单独的线程上运行循环。阅读此处http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
,了解BackgroundWorker
的使用情况