首页 / 知识
关于多线程:Windows窗体线程和事件-ListBox会及时更新,但是Progressbar会遇到巨大的延迟
2023-04-12 06:33:00

Windows Forms Threading and Events - ListBox updates promptly but progressbar experiences huge delay我们的团队正在创建一个新的招聘工作流程系统,以取代旧的工作流程系统。我的任务是将旧数据迁移到新架构中。我决定通过创建一个小的Windows Forms项目来做到这一点,因为架构根本不同,并且直接的TSQL脚本不是一个合适的解决方案。 完成工作的主要密封类" ImportController"声明了以下委托事件:
主窗口使用新线程在该类中启动静态方法:
ImportProgressEvent args携带字符串消息,进度条的最大int值和当前的进度int值。 Windows窗体订阅该事件:
并使用自己的委托以这种方式响应事件:
最后,进度条和列表框将更新:
事情是ListBox似乎更新得非常快,但是进度条始终不会移动,直到批处理几乎完成为止。是什么赋予了 ? 也许您可以尝试使用BackgroundWorker组件。它使穿线更加容易。这里的例子:
@约翰 感谢您的链接。 @将 线程池没有任何好处,因为我知道它只会产生一个线程。在对SQL Server进行读写操作时,使用线程纯粹是为了具有响应UI。这当然不是短暂的线程。 关于大锤,您是对的。但是,事实证明,我的问题毕竟在屏幕和椅子之间。我似乎有一个异常的数据批,其外键记录比其他批次多得多,并且恰好是在过程的早期选择的,这意味着currentProgress在10秒钟之内不会获得++信息。 @所有 感谢您的所有投入,这让我开始思考,使我得以在代码中的其他地方查找,这导致了我的谦卑,我再次证明错误通常是人为的:) 您是否有机会运行Windows Vista?我注意到在某些与工作相关的应用程序中,情况完全相同。以某种方式,进度栏"动画"时似乎会有延迟。
可能不在范围之内,但是有时对
好的,我很感激,很高兴找到您的bug,但是您有没有看过BackgroundWorker?它几乎完全按照您的操作来做,但是是以标准化的方式(即没有您自己的委托人)并且不需要创建新的线程-两者都是(也许很小,但也许仍然有用)优点。 您确定在所有此过程中UI线程都可以自由运行吗?也就是说,它不是在Join或其他等待中处于阻塞状态吗?那就是我的样子。 使用BackgroundWorker的建议是一个很好的建议-绝对优于尝试通过大量刷新/更新调用来大刀阔斧地摆脱问题。 而且BackgroundWorker将使用池线程,这是比创建自己的短期线程更友好的行为方式。 |
最新内容
相关内容
python怎样终止线程
python怎样终止线程,培训,线程,方法,定义,以上,更多,内容,在python中启动和关闭线程:一、启动线程首先导入threadingimportthreading然后定python实现线程安全的单例模式
python实现线程安全的单例模式,培训,线程,模式,python线程和进程的区别
python线程和进程的区别,系统,数据,培训,单位,进程,线程,管理,时间,通讯,地址,python引入进程和线程的概念及区别threading模块提供的类:Threapython什么是主线程
python什么是主线程,培训,单位,主线,线程,结束,任务,案例,结果,最小,进程,Python主线程和子线程setDaemon(False)当一个进程启动之后,会默认产python创建多线程的两种方法
python创建多线程的两种方法,培训,第一,代码,业务,方法,线程,函数,任务,演示,实例,当我们使用python编程的过程中需要多个输出的任务的话,为了python创建新线程有哪些方法
python创建新线程有哪些方法,培训,方法,线程,对象,测试,实例,以上,参数,教程,更多,python创建新线程有哪些方法1、方法(1)直接创建threading.使用lambda作为事件处理程序会导致
使用lambda作为事件处理程序会导致内存泄漏吗?,使用lambda作为事件处理程序会导致内存泄漏吗?,方法,memory,leak,handlers,Can using l防止TreeView触发VB6中的事件?
防止TreeView触发VB6中的事件?,防止TreeView触发VB6中的事件?,事件,处理程序,我有一个,代码,Prevent a TreeView from firing events i关于多线程:为什么我的asp.net应用
关于多线程:为什么我的asp.net应用程序抛出ThreadAbortException?,关于多线程:为什么我的asp.net应用程序抛出ThreadAbortException?,冒关于多线程:我应该如何对线程代码进
关于多线程:我应该如何对线程代码进行单元测试?,关于多线程:我应该如何对线程代码进行单元测试?,多线程,线程,执行,测试,How should I un关于.net:多线程设计最佳实践
关于.net:多线程设计最佳实践,关于.net:多线程设计最佳实践,服务,获取,记录,这个问题,Multithreading Design Best Practice考虑一下这关于多线程:在C#中访问变量是一个原
关于多线程:在C#中访问变量是一个原子操作吗?,关于多线程:在C#中访问变量是一个原子操作吗?,变量,读取,线程,同步,Is accessing a variable