Hallo zusammen,
seit einiger Zeit tritt in einem von mir geschriebenen Programm sehr oft die AccessViolationException mit dem Fehler "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist." auf, wenn ich etwas in eine bestimmte TextBox schreibe. Ich vermute, dass es an der angepassten AutoVervollständigung liegt, wüsste aber nicht, wordn genau, da mir keine Zeile markiert wird Hier ist der Codeausschnitt:
Und hier das TextChanged Event
Auch wenn ich versuche, den Fehler mit Try-Catch Blöcken abzufangen, funktioniert es nicht. Ich hoffe, einer von euch kennt eine Lösung und bedanke mich schonmal im Vorraus
Viele Grüße
leolabs
seit einiger Zeit tritt in einem von mir geschriebenen Programm sehr oft die AccessViolationException mit dem Fehler "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist." auf, wenn ich etwas in eine bestimmte TextBox schreibe. Ich vermute, dass es an der angepassten AutoVervollständigung liegt, wüsste aber nicht, wordn genau, da mir keine Zeile markiert wird Hier ist der Codeausschnitt:
VB.NET-Quellcode
- Private Sub doAutoComplete()
- Try
- Dim ls As New List(Of String)
- Dim t As String = doReplace(TextBox1.Text)
- Dim query As String = ""
- If Not TextBox1.AutoCompleteCustomSource.Contains(TextBox1.Text) Or lastInput = "" Then
- If scdict.Keys.Contains(t.Split(" ")(0)) Then
- If t.Contains("\") Then
- query = doReplace(TextBox1.Text.Substring(TextBox1.Text.Split(" ")(0).Length + 1))
- For Each e As String In My.Computer.FileSystem.GetDirectories(query.Substring(0, query.Length - query.Split("\")(UBound(query.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
- ls.Add(t.Split(" ")(0) & " " & e)
- ls.Add(t.Split(" ")(0) & " " & doReverseReplace(e))
- Next
- For Each e As String In My.Computer.FileSystem.GetFiles(query.Substring(0, query.Length - query.Split("\")(UBound(query.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
- ls.Add(t.Split(" ")(0) & " " & e)
- ls.Add(t.Split(" ")(0) & " " & doReverseReplace(e))
- Next
- End If
- Else
- If t.Contains("\") Then
- For Each e As String In My.Computer.FileSystem.GetDirectories(t.Substring(0, t.Length - t.Split("\")(UBound(t.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
- ls.Add(e)
- ls.Add(doReverseReplace(e))
- Next
- For Each e As String In My.Computer.FileSystem.GetFiles(t.Substring(0, t.Length - t.Split("\")(UBound(t.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
- ls.Add(e)
- ls.Add(doReverseReplace(e))
- Next
- Else
- ls.AddRange(scdict.Keys)
- End If
- End If
- For Each term As XElement In xdoc.<appconfig>.<history>.Descendants()
- ls.Add(term.Value)
- Next
- If scdict.Keys.Contains(t.Split(" ")(0)) Then
- For Each ac As String In scdict(t.Split(" ")(0)).AutoComplete
- ls.Add(t.Split(" ")(0) & " " & ac)
- Next
- End If
- ls.AddRange(startList)
- If Not (ls.Contains(t) And Not ls.Count = 0 And Not lastInput = TextBox1.Text) Or TextBox1.Text.Length = 1 Then
- TextBox1.AutoCompleteCustomSource.Clear()
- TextBox1.AutoCompleteCustomSource.AddRange(ls.ToArray)
- lastInput = TextBox1.Text
- End If
- ls = Nothing
- End If
- Catch
- End Try
- End Sub
Und hier das TextChanged Event
VB.NET-Quellcode
- Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
- Try
- If scdict.ContainsKey(TextBox1.Text.Split(" ")(0)) Then
- Me.Text = "QuExeCute - " & scdict(TextBox1.Text.Split(" ")(0)).Title
- Label1.Text = scdict(TextBox1.Text.Split(" ")(0)).Title
- Label1.Left = Me.Width - Label1.Width - 19
- PictureBox1.Image.Dispose()
- PictureBox1.Image = Image.FromFile(doReplace(scdict(TextBox1.Text.Split(" ")(0)).IconPath))
- ElseIf startList.Contains(TextBox1.Text) Then
- Label1.Text = l("startmenu")
- Label1.Left = Me.Width - Label1.Width - 19
- PictureBox1.Image.Dispose()
- PictureBox1.Image = My.Resources.QuickLaunch_Logo32
- Else
- Me.Text = "QuExeCute - " & l("title_openpath")
- Label1.Text = l("title_openpath")
- Label1.Left = Me.Width - Label1.Width - 19
- PictureBox1.Image.Dispose()
- PictureBox1.Image = My.Resources.QuickLaunch_Logo32
- End If
- Catch ex As Exception
- End Try
- Dim gtitle As Graphics = lblMsgText.CreateGraphics()
- Dim wtitle As Integer = Label1.Width
- If lblMsgText.Text <> "" Then
- wtitle = CInt(gtitle.MeasureString(Label1.Text, Label1.Font, Label1.Width).Width)
- gtitle.Dispose()
- End If
- Dim gtb As Graphics = lblMsgText.CreateGraphics()
- Dim wtb As Integer = TextBox1.Width
- If lblMsgText.Text <> "" Then
- wtb = CInt(gtb.MeasureString(TextBox1.Text, TextBox1.Font, TextBox1.Width).Width) + 15
- gtb.Dispose()
- End If
- If TextBox1.Width - wtitle > wtb Then
- Label1.Show()
- Else
- Label1.Hide()
- End If
- Try
- doAutoComplete()
- Catch ex As Exception
- End Try
- End Sub
Auch wenn ich versuche, den Fehler mit Try-Catch Blöcken abzufangen, funktioniert es nicht. Ich hoffe, einer von euch kennt eine Lösung und bedanke mich schonmal im Vorraus
Viele Grüße
leolabs