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