Foxtable(狐表)用户栏目专家坐堂 → [求助]请教“逛逛” 老师,“队列使用的简例”的一些问题


  共有2456人关注过本帖树形打印复制链接

主题:[求助]请教“逛逛” 老师,“队列使用的简例”的一些问题

帅哥哟,离线,有人找我吗?
zyqzyy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:821 积分:5868 威望:0 精华:0 注册:2013/7/29 12:00:00
[求助]请教“逛逛” 老师,“队列使用的简例”的一些问题  发帖心情 Post By:2015/12/15 15:46:00 [只看该作者]

按老师的“队列使用的简例”
随机出现下面两个问题:
1、 连接未关闭. 连接的当前状态为正在连接
2、如下图:


图片点击可在新窗口打开查看此主题相关图片如下:数据源01.png
图片点击可在新窗口打开查看
队列处理函数:

If  Vars("逻辑1") > 0 AndAlso _MyQueue IsNot Nothing AndAlso  _MyQueue.Count > 0  Then
    Dim dr As DataRow = _MyQueue.Dequeue   '获取队列的第一个值
    Dim Change As String = dr("ChangeType")
    Dim ftpfile As String
    If dr.IsNull("FtpPath") = True    '合成文件明细表的文件名
        ftpfile =  dr("FullPath").Replace(getConfigValue("LocalPath",""),"").Replace("\","/")
    Else
        ftpfile =  dr("FtpPath").Replace("\","/")
    End If
    Dim s As String
    Dim ftpPath1 As String
    ftpPath1 = dr("FtpPath")
    s = FileSys.GetName(dr("FullPath"))  '取出文件名,用于合成ftp上传路径
    ftpPath1 = ftpPath1.Replace(s,"")    '生成本地的目录(网盘下的目录),用于建立ftp目录
    Dim ftpPath As String
    ftpPath = getConfigValue("FtpPath","")  &  ftpPath1   '合成传递ftp上传文件路径
    Dim fname As String = dr("FullPath").Replace(GetConfigValue("LocalPath",""),"").Replace("\","/")   '合成文件明细表的文件名
   
    Dim dsys As DataRow
    dsys = DataTables("System_Set").Find("User_Name = '" & User.Name & "'")   '取出ftp"根目录"
    If dsys Is Nothing
        Return Nothing
    End If
    dr("success") = 2   '正在同步
    dr.Save()
    'Dim det As String = dsys("UnitName") & "|" & dsys("DepartmentOne")  & "|" & dsys("User_Name")  '用户信息:0单位1科室2用户名
    Dim d As DataRow
    d = DataTables("FilesTB").SQLFind("[UnitName] = '" & dsys("UnitName") & "' and  [DepartmentOne] = '" & dsys("DepartmentOne") & "' and  [User_Name] = '" & dsys("User_Name") & "' and [FtpPath] = '" & fname & "'")
    If d IsNot Nothing

If dr.Isnull("OldName") = False  '文件重命名事件的处理
            If dr("ChangeType") = "Deleted" OrElse dr("ChangeType") = "Changed"    '文件删除事件的处理
                DataTables("TempTable").ReplaceFor("OldName","","[FullPath] = '" & dr("FullPath") & "'")   '删除事件记录表中重命名的内容
            Else
                Dim a0,a1,a2,a3 As String
                a3 = getConfigValue("LocalPath","") &  dr("OldName").Replace("/","\")  'Renamed3   原本地文件名(路径)
                a2 = getConfigValue("LocalPath","")  &  dr("FtpPath").Replace("/","\")   'Renamed2   新本地文件名(路径)
                a1 = getConfigValue("FtpPath","")  & dr("FtpPath")   'Renamed1   新ftp文件名
                a0 = getConfigValue("FtpPath","")  & dr("OldName")   'Renamed0   原ftp文件名
                If Functions.Execute("Renamed",a0,a1,a2,a3) = True
                    dr("success") = 3  '重命名成功
                    Vars("逻辑1") += 1   '通知执行下一个任务
                Else
                    dr("success") = 1  '重命名失败
                    dr("Failure") += 1
                    Vars("逻辑1") += 1   '通知执行下一个任务
                End If
                dr.Save()
            End If
           
        ElseIf Change = "Deleted"
            ThreadCount = 0
            ThreadSum = 0
            ThreadSum += 1  '下载的任务数加1
            UpdateOff = False
            If Functions.Execute("Deleted",ftpPath & s ,dr("FullPath"),ftpfile) = True  '参数1 ftp路径及文件名,参数2本地路径及文件名 ,参数3:明细表中的文件名
                dr("success") = 3  '文件删除成功
                Vars("逻辑1") += 1   '通知执行下一个任务
            Else
                dr("success") = 1  '文件删除失败
                dr("Failure") += 1
                Vars("逻辑1") += 1   '通知执行下一个任务
            End If
            dr.Save()
           
        ElseIf Change = "Created" OrElse dr("ChangeType") = "Changed" OrElse (dr.isnull("OldName") And  dr("ChangeType") = "Renamed")    '文件新建,更改事件的处理
            If FileSys.FileExists(dr("FullPath"))   '本地文件不存在则删除事件记录
                If FileIsOpened(dr("FullPath")) = False Then
                    Dim ifo As New FileInfo(dr("FullPath"))
                    If ifo.Length > 0   '文件的内容为空值,不上传,直接标记为成功,这种情况:新建文件还未添加内容
                        If  CRCCheckFile(dr("FullPath")) > ""
                            d = DataTables("FilesTB").AddNew()  '添加文件
                            d("FtpPath") = dr("FtpPath")
                            d("CRCCheck") = CRCCheckFile(dr("FullPath"))
                            d("UnitName") = dsys("UnitName")
                            d("DepartmentOne") = dsys("DepartmentOne")
                            d("User_Name") = dsys("User_Name")
                            d("date") = Date.Now()
                            d.Save()
                            If Functions.Execute("FileCreated",dr("FullPath"),ftpPath,ftpPath & s ) = True   '参数1本地路径及文件名, ,参数2ftp路径,,参数3ftp路径及文件名
                                dr("success") = 3
                                Vars("逻辑1") += 1   '通知执行下一个任务
                            Else
                                dr("success") = 1  '文件建,改失败
                                dr("Failure") += 1
                                Vars("逻辑1") += 1   '通知执行下一个任务
                            End If
                        Else
                            dr("success") = 1   '事件记录表标记为1失败
                            dr("Failure") += 1
                            Vars("逻辑1") += 1   '通知执行下一个任务
                            'DataTables("TempTable").ReplaceFor("success",1,"FullPath = '" & dr1("FullPath") & "'")   '事件记录表标记为1,失败!
                        End If
                    Else
                        dr("success") = 3
                        Vars("逻辑1") += 1   '通知执行下一个任务
                    End If
                Else
                    dr("success") = 1   '事件记录表标记为1失败
                    dr("Failure") += 1
                    Vars("逻辑1") += 1   '通知执行下一个任务
                End If
            End If
           
        ElseIf Change = "Dn"
            Dim  locName = (GetConfigValue("LocalPath","") & dr("FullPath")).Replace("/","\")  '合成 本地文件名及路径
            Dim  nFTP =  dr("FullPath")   ' ftp文件名及路径
            ' UpdateOff = False  '关闭文件监视器
            ThreadCount = 0
            ThreadSum = 0
            ThreadSum += 1    '下载的任务数加1
            UpdateOff = False
            If Functions.Execute("FTPDown",locName,nFTP,dr("Failure"),GetConfigValue("UserInfo","")) = True   '参数1本地文件,'参数2 ftp文件名,'参数3 同步次数 参数4'用户信息:0单位1科室2用户名
                dr("success") = 3
                Vars("逻辑1") += 1   '通知执行下一个任务
            Else
                dr("success") = 1  '文件下载失败
                dr("Failure") += 1
                Vars("逻辑1") += 1   '通知执行下一个任务
            End If
            dr.Save()
           
        ElseIf Change = "Up"
            Dim ftn As String = dr("FullPath")
            ftn = ftn.Replace(GetConfigValue("LocalPath",""),"")  '合成ftp文件名及路径
            If  Functions.Execute("FileUpload",dr("FullPath"),ftn) = True
                dr("success") = 3
                Vars("逻辑1") += 1   '通知执行下一个任务
            Else
                dr("success") = 1  '文件上传失败
                dr("Failure") += 1
                Vars("逻辑1") += 1   '通知执行下一个任务
            End If
            dr.Save()
        End If
    End If
Else
    Vars("逻辑1") = -1
End If

[此贴子已经被作者于2015/12/15 15:51:07编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/15 15:50:00 [只看该作者]

上传具体例子测试。


 回到顶部
帅哥哟,离线,有人找我吗?
zyqzyy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:821 积分:5868 威望:0 精华:0 注册:2013/7/29 12:00:00
  发帖心情 Post By:2015/12/15 15:55:00 [只看该作者]

源文件不方便上传,慢慢做例子!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/15 16:02:00 [只看该作者]

你用多线程修改同一个资源很容易出问题的,这个就是foxtable为什么不敢做异步加载的缘故。

 回到顶部
帅哥哟,离线,有人找我吗?
zyqzyy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:821 积分:5868 威望:0 精华:0 注册:2013/7/29 12:00:00
  发帖心情 Post By:2015/12/16 9:27:00 [只看该作者]

感谢,知道原因是“多线程修改同一个资源的问题”,基本解决!测试中。

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2015/12/16 11:04:00 [只看该作者]

多线程  要注意委托的使用

任何跨线程的调用,尽量使用委托



 回到顶部