ste*_*eve 0 vb.net user-interface multithreading asynchronous winforms
当程序正在执行其工作时,我的程序的GUI冻结.我创建了一个批量导入,可以通过被调用的Web服务将X-000数据行发送到数据库中.代码已经很大了,我无法为多线程目的重写它.
我不知道怎么做.有什么建议?如果需要,我会展示一些代码,但此刻我不知道该展示什么.
首先,您应该重写它以避免在UI线程上同步执行此操作.如果你做了很多的UI线程上的工作,它只是将冻结UI线程.这里有几个选项:
如果你的Web服务代理支持异步调用,如果你正在使用VB 11,可以使用异步/等待从UI线程异步方法异步调用Web服务,并且控件将返回回在到UI线程调用完成后异步方法中的相同点.让你的头部不同步需要一点时间,但如果可能的话,这可能是最好的选择.
您可以使用任务并行库在不同的线程上进行调用,但是您需要仔细考虑该线程将如何与您的UI线程进行交互.
您可以使用BackgroundWorker在另一个线程上运行某些代码,但在UI线程上报告进度和完成情况
你可以潜在地调用Application.DoEvents每个Web服务调用之间,让UI处理事件.这很危险 - 它可能导致重入代码,因此锁定将不会像您期望的那样运行,以及类似的难以诊断的错误.如果所有其他方法都失败,这应该是您的最后选择.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |