vb 如何处理运行后没有响应问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 03:05:03
我用vb二次开发solid edge,但是,程序运行后,由于调用的文件比较大,运行过程中,只要用鼠标点击窗体,就出现“由于其他程序忙,不能相应。。。。,重试还是切换到”哪位大侠能帮我解决在运行过程中,可以点击窗口而不出现重试的对话框?
主要问题是在远程拷贝过程,因为在执行过程中,有些文件需要从公司总部的服务器上读出来,在读的过程中,消耗大量时间。就是在拷贝期间出的问题。我用调用dos的拷贝方法,就没有问题,但是需要开一个dos窗口,不喜欢,用vb拷贝就出现没有响应的问题。

单步跟一下,
如果是你在调用某个DLL的某个方法的时候,DLL本身长时间没有返回,那么没有办法,因为不是你的问题,而是DLL本身的问题.
如果是DLL很快返回了而你是在循环中不停的调用该事件,那么在循环中的适当位置加doevents来释放资源.

不知道你所谓的"vb拷贝"是什么流程,不过一般这中情况都是自己用winsock控件单写程序,传输二进制文件,收到一部分数据就写到文件中,再继续收继续写,这样在每次写完文件,就可以调用一下doevents来释放资源,保证程序不会僵死.
你的vb拷贝流程是这样的吗?

如果你觉的麻烦就应该转换一下思路,考虑就用CMD下的FTP命令直接FTP过来就行了,你应该考虑如何调用CMD的时候不显示出DOS窗口.

本来以为一个doevents能解决的,看来,你得想别的办法了

没搞过vb的这种开发,帮不了你了。
试过多线程处理没有?

不要用FileCopy函数
Private Sub MyFileCopy(ByRef Path1 As String, ByRef Path2 As String)
Const BufferLength = 1048576
Const EventsMax = 5
'可以把 1048576 换成你想要的缓冲区大小(单位:字节,1048576 字节合一兆)
'可以把 5 换成你想要的系统中待处理事件数最大值。(必须大于 5)
Dim fNum1 As Integer, fNum2 As Integer
Dim I As Long, J As Long, Temp As Long
Static IsInProcedure As Boolean
Dim bBuffer(1 To BufferLength) As Byte, ReadedBytes As Long
If IsInProcedure Then
MsgBox "中断重入!请在拷贝完成后再进行第二次拷贝!", vbCritical
Exit Sub
End