Helpmecodeplz Ответов: 1

Что не так с моим кодом наблюдателя файловой системы VB.NET


когда мой наблюдатель файловой системы обнаруживает вирус, появляется диалоговое окно, но когда я нажимаю опцию Удалить файл, он говорит, что он открыт в моей программе, но в наблюдателе файловой системы, когда я добавляю openfiledialog.Dispose function он не показывает мой диалог, так что вот код может ли кто-то обеспечить исправление? код ниже.


Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
        Try
            Detect.Labellastreal.Text = e.FullPath
            ListBox3.Items.Add(Detect.Labellastreal.Text)
            Me.OpenFileDialog3.FileName = ""
            Dim scanbox As New TextBox
            scanbox.Text = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\VirusList.dat").ToString
            Dim md5 As New MD5CryptoServiceProvider
            Dim f As New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
            f = New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read, &H2000)
            md5.ComputeHash(f)
            Dim hash As Byte() = md5.Hash
            Dim buff As New StringBuilder
            Dim hashByte As Byte
            For Each hashByte In hash
                buff.Append(String.Format("{0:X2}", hashByte))
            Next
            f.Close()
            If scanbox.Text.Contains(buff.ToString) Then
                Me.OpenFileDialog3.FileName = e.FullPath
                Detect.ShowDialog()


                WriteToLog("Virus detected")

            End If

        Catch exception1 As Exception
            ProjectData.SetProjectError(exception1)
            Dim ex As Exception = exception1
            ProjectData.ClearProjectError()
        End Try
    End Sub


Что я уже пробовал:

в первом я сказал, что попробовал OpenFileDialog.Метод Dispose но не сработал :(
может ли кто-нибудь, пожалуйста, предоставить исправление заранее.

1 Ответов

Рейтинг:
1

RickZeeland

Вам, вероятно, нужно использовать Взывать, поскольку не разрешается изменять элементы управления пользовательским интерфейсом из другого потока, см.: Контроль.Вызовите Метод (Делегат, Объект[]) (System.Окна.Формы)[^]
И ответ здесь: вызов в другом классе[^]
Вот пример для функции без параметров, а также для функции с параметрами: Доступ к элементам управления из рабочих потоков-VBForums[^]
Вот страница из книги .Чистая попался по о вызове: NET Gotchas: 75 способов улучшить ваш C# и VB.NET программы - Venkat Subramaniam - Google Boeken[^]


Helpmecodeplz

спасибо, чувак, но я не понимаю их ссылок, как мне добавить вызов в код, который я написал выше ? спасибо, что так быстро ответили, но не могли бы вы объяснить, какой код я пишу и где ура, чувак.

RickZeeland

Я больше похож на пользователя C#, но я думаю, что вам нужно что-то вроде этого:
Если Мне.Свойство Invokerequired Тогда
- ваш код OpenFileDialog ...
Me.Invoke(...)
Я постараюсь найти для вас хороший пример, но пока ничего не нашел.

Helpmecodeplz

спасибо, поэтому, когда вы говорите свой диалоговый код открытого файла, вы имеете в виду OpenFileDialog.Распоряжаться или код, показывающий диалоговое окно ЭСТ
но на самом деле Спасибо что помог мне чувак

RickZeeland

Нет, не только утилизация, но и любое использование элемента управления пользовательским интерфейсом, который также может быть текстовым полем или кнопкой !

Helpmecodeplz

спасибо за вашу помощь

Member 13242613

Мой диалог не всплывает, странно.