Foxtable(狐表)用户栏目专家坐堂 → [求助]能不能多线程检索


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

主题:[求助]能不能多线程检索

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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
[求助]能不能多线程检索  发帖心情 Post By:2018/4/4 21:35:00 [只看该作者]

论坛中的检索文档内容字符串,我测试了一下,基本检索一个文件用时1-2秒,比较耗时,能否改进加快:
http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=70797&authorid=0&page=0&star=2

mark word高亮查找

 

Dim app As New MSWord.Application
try
    Dim dlg As New FolderBrowserDialog
    If dlg.ShowDialog = DialogResult.Ok Then
        MessageBox.Show("需要检索的文档目录是:" & dlg.SelectedPath,"提示")
    End If
    Dim s As String = ""
    For Each file As String In FileSys.GetFiles(dlg.SelectedPath)
        If file.ToLower.EndsWith(".doc") Then
            Dim doc = app.Documents.Open(file)
            Dim gjzs As String = "Test|Abcdefg|test"
            Dim flag As Boolean = False
            For Each gjz As String In gjzs.split("|")
                app.ActiveWindow.Selection.WholeStory
                With app.ActiveWindow.Selection.Find
                    .HitHighlight(gjz, RGB(255, 255, 0), , , , , , , True)
                End With
                If app.ActiveWindow.Selection.Find.Execute Then flag = True
            Next
            If flag = False  Then
                Doc.close
            Else
                s = s & IIF(s>"", chr(13), "") & file
            End If
        End If
    Next
    If s > "" Then
        MessageBox.Show("共计找到包含关键字的文档有" & s.Split(chr(13)).Length & "个,目录如下:" & vbcrlf & s,"关键字文档查找",MessageBoxButtons.OK,MessageBoxIcon.None)
        app.Visible = True
    Else
        MessageBox.Show("没有找到包含关键字的文档","关键字文档查找",MessageBoxButtons.OK,MessageBoxIcon.None)
        app.quit
    End If
    
catch ex As exception
    msgbox(ex.message)
    app.Quit
finally
End try


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/4 22:04:00 [只看该作者]

全局代码

 

Public Sub thread_sub1(ByVal file As object)
Dim app As New MSWord.Application
try
    Dim doc = app.Documents.Open(file)
    Dim gjzs As String = "Test|Abcdefg|test"
    Dim flag As Boolean = False
    For Each gjz As String In gjzs.split("|")
        app.ActiveWindow.Selection.WholeStory
        With app.ActiveWindow.Selection.Find
            .HitHighlight(gjz, RGB(255, 255, 0), , , , , , , True)
        End With
        If app.ActiveWindow.Selection.Find.Execute Then flag = True
    Next
    If flag = False  Then
        Doc.close
        app.quit
    Else
        app.Visible = True
    End If
catch ex As exception
    msgbox(ex.message)
    app.Quit
finally
   
End try

End Sub

 

调用代码

 

Dim dlg As New FolderBrowserDialog
If dlg.ShowDialog = DialogResult.Ok Then
    MessageBox.Show("需要检索的文档目录是:" & dlg.SelectedPath,"提示")
End If
Dim s As String = ""
For Each file As String In FileSys.GetFiles(dlg.SelectedPath)
    If file.ToLower.EndsWith(".doc") Then
        Dim t0 As Threading.Thread
        t0 = New Threading.Thread(AddressOf thread_sub1)
        t0.Start(file)
    End If
Next


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


加好友 发短信
等级:五尾狐 帖子:1131 积分:8199 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2018/4/4 22:09:00 [只看该作者]

mark

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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/4/6 17:48:00 [只看该作者]

按照原先的代码,和老师2楼提供的代码做了个对比的实例。
“多线程”按钮代码还有点问题,里面计时的“秒表”也不运行,需要老师帮助看看。
谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:检索测试.rar



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/6 19:29:00 [只看该作者]

1、多线程使用的时候,代码执行完毕,并不代表线程的代码执行完毕。你的提示信息是错误的。

 

2、提示信息,你可以写在线程里面,控制显示。

 

3、目前的代码,查询条件,是区分大小写的,这个要注意。(2楼问题绝对是没问题,请在读懂的基础上自行改造)

 

4、测试项目文件的时候,请不要用太多文件测试,一两个足够。


 回到顶部