我正在测试一个应用程序,它检查网络中是否存在文件.在我的测试中,我故意拉网络插件,因此找不到文件.问题是这导致我的应用程序无响应至少15秒.我在VB6中使用了FileExists()和GetAttr()函数.有谁知道如何解决这个问题?(不,我不能停止使用VB6)
谢谢,查理
不幸的是,VB并没有让这很容易,但幸运的是Win32 API,并且从VB中调用Win32函数非常简单.
对于LAN/WAN,您可以结合使用以下Win32 API调用来告诉您远程连接是否存在而无需处理网络超时:
Private Declare Function WNetGetConnection Lib "mpr.dll" Alias _
"WNetGetConnectionA" (ByVal lpszLocalName As String, _
ByVal lpszRemoteName As String, ByRef cbRemoteName As Long) As Long
Private Declare Function PathIsNetworkPath Lib "shlwapi.dll" Alias _
"PathIsNetworkPathA" (ByVal pszPath As String) As Long
Private Declare Function PathIsUNC Lib "shlwapi.dll" Alias "PathIsUNCA" _
(ByVal pszPath As String) As Long
Run Code Online (Sandbox Code Playgroud)
对于Internet,您可以使用Win32 API调用:
Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
Const INTERNET_CONNECTION_MODEM = 1
Const INTERNET_CONNECTION_LAN = 2
Const INTERNET_CONNECTION_PROXY = 4
Const INTERNET_CONNECTION_MODEM_BUSY = 8
Run Code Online (Sandbox Code Playgroud)
这个VB站点有更多关于可以通过VB在Win32 API中调用的路径导向函数的讨论.
我不确定您是否可以更优雅地处理这个问题 - 如果网络出现问题,可能需要一段时间超时才能表明问题严重到无法正常工作。
如果 VB6 支持线程(我真的不记得了),您可以将文件旋转到后台线程中打开,并让 UI 允许用户取消它(或执行其他操作,如果有意义的话),但这引入了一个非常重要的问题额外的复杂性。