2016-04-05 18 views
0

Ich habe detnetbar DevComponents erweiterte Treeview verwendet, um mehrere Verzeichnisbäume für eines meiner Projekte zu erstellen. Funktionalität funktioniert alles gut.VB.NET Parameter ist nicht gültig

Ich habe jetzt Bilder zu den Verzeichnis-Datei Knoten hinzugefügt (z. B. PDF-Bild, wenn es eine PDF-Datei ist) und veröffentlicht die Anwendung. Die Anwendung läuft fehlerfrei auf jedem Computer, aber sobald ich das Dateiverwaltungsformular schließe (Ich habe ein Formular mit Schaltflächen, das ist das erste Startformular. Die Schaltflächen führen mich zu anderen Formen. Auf Knopfdruck versteckt es das Bedienfeld und zeigt die entsprechende Form durch Showdialog - File Management Form ist eine dieser Tasten) und öffnen sie es erneut - bekomme ich folgende Fehlermeldung:

parameter_is_not_valid

es schlägt fehl, dann die Knoten und nach einem laden Einige Versuche, Microsoft.Net Framework Fenster erscheint und beendet die Anwendung.

Ich bekomme die Bilder von meiner Ressource-Datei. Bitte beachten Sie den Code für LoadAllSubDirectoriesFiles, wo der Fehler auftritt:

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 

I 2 Tage jetzt damit verbracht haben versucht, die Ursache herauszufinden und beheben für dieses Problem. Es gab Beiträge, die darüber sprachen, dass das Bild entsorgt wurde und nicht in der Lage war, die Bildreferenz [http://blog.lavablast.com/post/2007/11/29/The-Mysterious-Parameter-Is-Not-Valid-Exception.aspx] abzurufen, das Bild zu klonen, bevor es entsorgt wurde usw. Ich habe einen Befehl gegeben und geklont, aber der Fehler steht immer noch. Ich habe versucht, einige andere Dinge, aber immer noch nicht erfolgreich.

Irgendwelche Vorschläge, was falsch ist?

EDIT 1 Bevor Sie das Formular zu schließen, lösche ich alle TreeNodes und verwenden Sie dann 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 

EDIT 2 Meine treeviews haben Hunderte von Knoten, Child-Knoten usw. Bitte sehen Sie sich das Bild meines Dateiverwaltungsformulars an (das ist das erste Mal, dass es geladen wurde, keine Fehler). Ich musste den Text wegen der Vertraulichkeit der Kunden verstecken, aber ich hoffe, es macht Sinn. Jedes Bild ist ein Knoten.

imgur.com/QQ2FzFV

+0

'Die Anwendung läuft ohne Fehler zum ersten Mal auf einem beliebigen Computer, aber sobald ich dieses Dateiverwaltungsformular schließe und es erneut öffne - ich bekomme den Fehler.' Klingt wie ein Problem vielleicht, wie Sie dieses Formular schließen/entsorgen. Irgendwelcher Code, den Sie in der Form haben, die Ereignis, etc. schließt? – LarsTech

+0

@LarsTech Das Schließen des Formulars erfolgt einfach mit Me.Close(). Es gibt nichts anderes. Ich habe Treeview.nodes.clear() erst kürzlich hinzugefügt, aber das ist nicht der Grund. Aus irgendeinem Grund können einige der Bildreferenzen nicht abgerufen werden. Manchmal ist es in der Tree-Ansicht von atAllDirectories, manchmal in atInInbox usw. Es ist völlig zufällig, auf wie viele Bäume der Fehler nach jedem Öffnen des Formulars auftritt. Bitte beachten Sie, keine Fehler, wenn ich das Formular das erste Mal öffne. – Nayon

+0

Ich weiß nicht, ob das Löschen dieser Knoten Ihnen etwas bringt. Wie wird diese Form erstellt? Wie viele "Knoten" gibt es in dieser Form? – LarsTech

Antwort

0

Ich hatte versucht, GC.Collect zu verwenden, um zu sehen, ob es funktioniert, und überraschend, es tat. Leider funktionierte es auf einer Maschine und nicht in einer anderen. Anstatt Bilder direkt von meinen Ressourcen aus aufzurufen, habe ich daher alle benötigten Bilder in einer Bildliste gespeichert, die ich an meine Baumansichten angehängt habe. Es funktioniert wie ein Zauber.

Verwandte Themen