Параметр VB.NET недействителен

Я использовал расширенный древовидный интерфейс dotnetbar devcomponents для создания нескольких деревьев каталогов для одного из моих проектов. Функциональность мудрая, все работает нормально.

Теперь я добавил изображения в узлы файлов каталога (например, изображение PDF, если это файл PDF) и опубликовал приложение. Приложение запускается без ошибок в первый раз на любом компьютере, но как только я закрываю эту форму управления файлами (у меня есть форма панели управления с кнопками, которая является начальной формой запуска. Кнопки переходят в другие формы. При нажатии кнопки она скрывается. панель управления и отображает соответствующую форму через showdialog - форма управления файлами является одной из этих кнопок) и снова открыть ее - я получаю следующую ошибку:

parameter_is_not_valid

Затем не удается загрузить узлы, и после нескольких попыток появляется окно Microsoft .Net Framework, которое завершает работу приложения.

Я получаю изображения из моего файла ресурсов. Пожалуйста, смотрите код для LoadAllSubDirectoriesFiles, где происходит ошибка:

    Private Sub LoadAllSubDirectoriesFiles(ByVal uParent As DevComponents.AdvTree.Node)
    ' Initialise Error Checking
    Dim uStackframe As New Diagnostics.StackFrame
    Dim ufile As IO.FileInfo = Nothing
    Try

        If uParent.Name.Length <> 248 Then

            Dim files As IO.FileInfo() = uParent.Tag.GetFiles()

            For Each file As IO.FileInfo In files
                If (Not file.Attributes.ToString.Contains("Hidden")) Then
                    Dim uNode As DevComponents.AdvTree.Node = New DevComponents.AdvTree.Node()
                    uNode.Tag = file
                    uNode.Name = file.FullName.ToLower
                    uNode.Text = file.Name
                    If file.Extension = ".msg" Then
                        uNode.Image = My.Resources.Resources.Mail3
                    ElseIf file.Extension = ".txt" Then
                        uNode.Image = My.Resources.Resources.Document
                    ElseIf file.Extension = ".pdf" Then
                        uNode.Image = My.Resources.Resources.pdf
                    ElseIf file.Extension = ".doc" OrElse file.Extension = ".docx" Then
                        uNode.Image = My.Resources.Resources.doc
                    ElseIf file.Extension = ".xlsx" Then
                        uNode.Image = My.Resources.Resources.excel
                    ElseIf file.Extension = ".pub" Then
                        uNode.Image = My.Resources.Resources.publisher
                    ElseIf file.Extension = ".pptx" Then
                        uNode.Image = My.Resources.Resources.powerpoint
                    ElseIf file.Extension = ".bmp" OrElse file.Extension = ".png" OrElse file.Extension = ".jpg" OrElse file.Extension = ".gif" OrElse file.Extension = ".tif" Then
                        uNode.Image = My.Resources.Resources.bitmap_image
                    ElseIf file.Extension = ".zip" OrElse file.Extension = ".rar" Then
                        uNode.Image = My.Resources.Resources.zip
                    Else
                        uNode.Image = My.Resources.Resources.unknown
                    End If
                    uNode.DragDropEnabled = True
                    uParent.Nodes.Add(uNode)
                End If
            Next
        End If
    Catch ex As Exception
        ' Catch Error
        If Err.Number <> 0 Then
            WriteAuditLogRecord(uStackframe.GetMethod.DeclaringType.FullName, uStackframe.GetMethod.Name.ToString, "Error", ex.Message & vbCrLf & vbCrLf & ex.StackTrace, 0)
            MsgBox("System Error Ref: " & sAuditID & vbCrLf & uStackframe.GetMethod.DeclaringType.FullName & " / " & uStackframe.GetMethod.Name.ToString & vbCrLf & ex.Message & vbCrLf & vbCrLf & ex.StackTrace & Chr(13) & sErrDescription & vbCrLf & vbCrLf & "Press Control + C to copy this error report", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Business Management System - Unexepected Error Ref: " & sAuditID)
        End If

    Finally
        ' CleanUp

    End Try

End Sub

Я потратил 2 дня, пытаясь выяснить причину и решить эту проблему. Были посты, в которых говорилось о том, что изображение было удалено и что он не мог получить ссылку на изображение [ http://blog.lavablast.com/post/2007/11/29/The-Mysterious-Parameter-Is-Not-Valid-Exception.aspx ], клонирование изображения перед удалением и т. Д. Я дал распоряжение на удаление и клонирование, но ошибка все еще остается. Пробовал пару других вещей, но все еще безуспешно.

Есть предложения, что не так?

РЕДАКТИРОВАТЬ 1 Перед закрытием формы я очищаю все триоды и затем использую Me.Close()

    Private Sub tsbClose_Click(sender As Object, e As EventArgs) Handles tsbClose.Click
    atRootFolder.Nodes.Clear()
    atAllDirectories.Nodes.Clear()
    atScannedFiles.Nodes.Clear()
    atFiles.Nodes.Clear()
    atInbox.Nodes.Clear()
    atSent.Nodes.Clear()
    Me.Close()
End Sub

РЕДАКТИРОВАТЬ 2 Мои древовидные представления имеют сотни узлов, дочерних узлов и т. Д. Пожалуйста, посмотрите изображение моей формы управления файлами (это первый раз, когда она была загружена, без ошибок). Мне пришлось скрыть текст из-за конфиденциальности клиента, но я надеюсь, что это имеет смысл. Каждое изображение является узлом.

imgur.com/QQ2FzFV

1 ответ

Решение

Я пытался использовать GC.Collect, чтобы увидеть, работает ли он, и удивительно, что это сработало. К сожалению, он работал на одной машине и не работал на другой. Поэтому вместо того, чтобы вызывать изображения непосредственно из моих ресурсов, я сохранил все необходимые изображения в списке изображений, который я прикрепил к своим древовидным представлениям. Это работает как шарм.

Другие вопросы по тегам