我使用了dotnetbar devcomponents高级树视图为我的一个项目创建了多个目录树。功能明智,一切正常。
我现在已经将图像添加到目录文件节点(例如pdf图像,如果它是pdf文件)并发布了应用程序。应用程序在任何计算机上第一次运行都没有任何错误,但是一旦我关闭了这个文件管理表单(我有一个带有按钮的控制面板表单,这是初始启动表单。按钮将我带到其他表单。点击按钮,它隐藏控制面板并通过showdialog显示相应的表单 - 文件管理表单是其中一个按钮)并重新打开它 - 我收到以下错误:
然后无法加载节点,经过几次尝试,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
我花了两天时间试图弄清楚原因并解决这个问题。有些帖子谈到图像被处理而无法检索图像参考[http://blog.lavablast.com/post/2007/11/29/The-Mysterious-Parameter-Is-Not-Valid-Exception.aspx],在处理之前克隆图像等。 我已经处理并克隆了一个go,但错误仍然存在。一直在尝试其他几件事,但仍然不成功。
对错误提出任何建议?
编辑1 在关闭表单之前,我清除所有treenodes,然后使用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
答案 0 :(得分:0)
我曾尝试使用GC.Collect查看它是否有效,并且令人惊讶。可悲的是,它在一台机器上工作而在另一台机器上没有。因此,我没有直接从我的资源调用图像,而是将所有必需的图像存储在我附加到树视图的图像列表中。它的工作就像一个魅力。