Избегайте заморозки форм - PullRequest
0 голосов
/ 01 мая 2020

Я делаю небольшое антивирусное программное обеспечение на VB. NET, которое использует MD5-хэши для сканирования файлов с компьютера. Однако, я заметил, что если я добавлю больше хэшей в текстовый файл, который используется для процесса сканирования, форма перестанет отвечать на запросы и после этого вылетит. бы то ни было. Программное обеспечение будет использовать также таймер для своей работы. Ниже я привел пример кода таймера:

 ProgressBar1.Maximum = Conversions.ToString(ListBox1.Items.Count)
        total.Text = Conversions.ToString(ListBox1.Items.Count)

        If Not ProgressBar1.Value = ProgressBar1.Maximum Then
            Try

                ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
                TextBox1.Text = ListBox1.SelectedItem.ToString
            Catch ex As Exception
            End Try



            Try

                Dim scanbox As New TextBox
                Dim read As String = My.Computer.FileSystem.ReadAllText("viruslist.txt")
                ProgressBar1.Increment(1)
                Detected.Text = Conversions.ToString(ListBox2.Items.Count)
                files.Text = Conversions.ToString(ProgressBar1.Value)
                scanbox.Text = read.ToString
                Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
                Dim f As FileStream = New FileStream(ListBox1.SelectedItem, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                f = New FileStream(ListBox1.SelectedItem, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                md5.ComputeHash(f)
                Dim hash As Byte() = md5.Hash
                Dim buff As StringBuilder = New StringBuilder
                Dim hashByte As Byte
                For Each hashByte In hash
                    buff.Append(String.Format("{0:X2}", hashByte))
                Next

                If scanbox.Text.Contains(buff.ToString) Then



                    ListBox2.Items.Add(ListBox1.SelectedItem)
                End If
            Catch ex As Exception
            End Try
        Else
            Timer1.Stop()
            MsgBox("Finished Scanning Folder!")
            TabControl1.SelectTab(3)
            If ListBox1.Items.Count = 0 Then
                MsgBox("No Threats were detected, Scan Window will close!", MsgBoxStyle.Information)

            End If
        End If

Я также включил код для кнопки «Начать сканирование» здесь ниже:

 FolderBrowserDialog1.SelectedPath = ("C:/Windows")
    FolderBrowserDialog2.SelectedPath = ("D:/")
    Try
            For Each strDir As String In System.IO.Directory.GetDirectories(FolderBrowserDialog1.SelectedPath)


                For Each strFile As String In System.IO.Directory.GetFiles(strDir)

                ListBox1.Items.Add(strFile)
                total.Text = strFile
                BackgroundWorker1.ReportProgress(strFile)
                System.Threading.Thread.Sleep(200)

            Next

            Next


        Catch ex As Exception
    End Try

    Timer1.Start()

Я хочу избежать зависания формы и сбой. Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...