重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
试试这个怎么样,添加在子进程里面,就加在你批量传输代码里的每一个传输后面,也就是大批量中的每传输一个数据就暂停一下,而不是每一个大批量才暂停一下
成都创新互联专业为企业提供四川网站建设、四川做网站、四川网站设计、四川网站制作等企业网站建设、网页设计与制作、四川企业网站模板建站服务,十年四川做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
System.Threading.Thread.Sleep(10) '让它走慢一点
多线程并不一定就可以缩短时间,具体要看你上面的“过程”是否调用数据库完成。如果调用了数据库,可以考虑用存储过程替代“过程”。另外看看“过程”里是否反复打开和关闭了数据库连接,如果是,这才是真正的耗时动作。如果没调用数据库,可以考虑使用Parallel类(.net4以后)里面的函数,使多个任务在多核CPU上并行运行,缩短时间。
你真心无聊。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。
主线程只是通知系统,请启动一个线程运行某某函数。
而哪个线程先运行完全在系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没有启动起来,所以你会遇到两个变量都是空值这种情况。
以下是在多线程中显示进度条代码
'定义一个委托
Delegate Sub dl_ShowProgress(ByVal iValue As Integer)
Public Sub ShowProgress(ByVal iValue As Integer)
If ProgressBar1.IsDisposed Then
Return
End If
If ProgressBar1.InvokeRequired = True Then
Dim pInvoke As New dl_ShowProgress(AddressOf ShowProgress)
Me.Invoke(pInvoke, New Object() {iValue})
Else
ProgressBar1.Value = iValue
ProgressBar1.Refresh()
End If
End Sub
'在多线程中调用ShowProgress(*)函数
多线程是用于处理复杂项目的
打个比方
你的主程序线程A中有个循环,由于代码是一行行走的,所以循环结束前下面的代码无法运行,而此时主界面的反应就类似卡死的样子,你点击按钮也没有反应,因为主线程在忙着循环呢,所以对按钮的事件代码要等待了,如果要避免这种情况,就要用到多线程,另开一个新线程专门用来执行循环代码,主界面就不会卡死了,只要在循环结束后将结果传回主线程调用就可以了,再复杂点要涉及到委托,控制了
按你的要求其实你的代码用不到多线程,只要把sleep放到两段代码中间就可以了。
新线程结束用thread.abort()
这是不可避免的,除非更换电脑硬件,让处理器及内存处理得更快,或是不要用自带的 Panel 和 Label 控件,自定义一个容器,内容自绘。
卡顿主要原因:
1、控件多了,电脑必然会慢,因为在 Windows 里每个控件都相当于一个窗口,有自己的句柄,系统需要维护对应的窗口消息,那么一定会卡顿,只能缓解不能消除。
2、可以用多线程,在子线程中更新控件,通过委托的方式通知主线程,可以有效缓解卡顿的问题。