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.

18/10/2007 - 11:36 von Stefan M. | Report spam
Hallo,

ich bekomme diesen Fehler nur manchmal und nicht nachvollziehbar.

Hier die Exception:


System.AccessViolationException wurde nicht behandelt.
Message="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."
Source="System.Windows.Forms"
StackTrace:
bei
System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr
wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
bei System.Windows.Forms.Control.DefWndProc(Message& m)
bei System.Windows.Forms.TreeView.WmMouseDown(Message& m,
MouseButtons button, Int32 clicks)
bei System.Windows.Forms.TreeView.WndProc(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei
System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32 pvLoopData)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32
reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext
context)
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[]
commandLine)
bei prog_hage.My.MyApplication.Main(String[] Args) in
17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain.nExecuteAssembly(Assembly assembly,
String[] args)
bei System.Runtime.Hosting.ManifestRunner.Run(Boolean
checkAptModel)
bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
bei
System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext
activationContext, String[] activationCustomData)
bei
System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext
activationContext)
bei
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
bei System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()



Es wird diese Sub durchlaufen:

Public Sub query(ByVal Programm As String)

Application.DoEvents()
TreeView1.Nodes.Clear()
TreeView2.Nodes.Clear()
TreeView3.Nodes.Clear()
TreeView4.Nodes.Clear()
Application.DoEvents()

Dim DBAdapter As System.Data.Odbc.OdbcDataAdapter = New
System.Data.Odbc.OdbcDataAdapter("SELECT xu.""xprog#"",
xp.""xprogname"" FROM pub.""xusedp"" xu , pub.""xprog"" xp WHERE
xp.""xprog#"" = xu.""xprog#"" AND xu.""xprog#used"" = '" & Programm &
"'", DBConnection)
Dim DBTable As DataTable = New DataTable
DBAdapter.Fill(DBTable)
TreeView1.BeginUpdate()
TreeView1.Nodes.Add(Programm, Programm)
Dim dr As System.Data.DataTableReader DBTable.CreateDataReader()
While dr.Read
TreeView1.Nodes(Programm).Nodes.Add(dr.Item("xprog#"),
dr.Item("xprog#") & " " & dr.Item("xprogname"))
End While
TreeView1.Nodes(0).Expand()
TreeView1.EndUpdate()

DBTable.Clear()
DBAdapter.Dispose()
DBAdapter = Nothing

DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#used"", xp.""xprogname"" FROM pub.""xusedp"" xu ,
pub.""xprog"" xp WHERE xp.""xprog#"" = xu.""xprog#used"" AND
xu.""xprog#"" = '" & Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView2.BeginUpdate()
TreeView2.Nodes.Add(Programm, Programm)
While dr.Read
TreeView2.Nodes(Programm).Nodes.Add(dr.Item("xprog#used"),
String.Format("{0}", dr.Item("xprog#used")) & " " &
dr.Item("xprogname"))
End While
TreeView2.Nodes(0).Expand()
TreeView2.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

'Includes noch nicht rekursiv !
DBTable.Clear()
DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#used"" FROM pub.""xusedn"" xu WHERE xu.""xprog#"" = '" &
Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView3.BeginUpdate()
TreeView3.Nodes.Add(Programm, Programm)
While dr.Read
If dr.Item("xprog#used") <> "ELSE.I" And
dr.Item("xprog#used") <> "ENDE.I" And dr.Item("xprog#used") <>
"ENDIF.I" And dr.Item("xprog#used") <> "IFDEF.I" And
dr.Item("xprog#used") <> "IFNDEF.I" And dr.Item("xprog#used") <>
"IFSET.I" And dr.Item("xprog#used") <> "MESSAGE.I" And
dr.Item("xprog#used") <> "START.I" Then

TreeView3.Nodes(Programm).Nodes.Add(dr.Item("xprog#used"),
String.Format("{0}", dr.Item("xprog#used")))
End If
End While
TreeView3.Nodes(0).Expand()
TreeView3.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

'Includierte
DBTable.Clear()
DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#"" FROM pub.""xusedn"" xu WHERE xu.""xprog#used"" = '" &
Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView4.BeginUpdate()
TreeView4.Nodes.Add(Programm, Programm)
While dr.Read
TreeView4.Nodes(Programm).Nodes.Add(dr.Item("xprog#"),
String.Format("{0}", dr.Item("xprog#")))
End While
TreeView4.Nodes(0).Expand()
TreeView4.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

end sub


Ich verwende DBAdapter und DBTable mehrmals, kann daher das Problem
kommen ?

Die Sub wird per Event im jedem TreeView aufgerufen, hier TreeView2:

Private Sub TreeView2_AfterSelect(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.TreeViewEventArgs) Handles
TreeView2.AfterSelect
Call query(TreeView2.SelectedNode.Name)
End Sub


Aber es passiert nicht generell und Multithreading verwende ich nicht.

Gruß
Stefan
 

Lesen sie die antworten

#1 leslie eldrige
18/10/2007 - 12:08 | Warnen spam
verwende TRY CATCH Struktur bei jedem Teil deiner Sub (z.B. bei der
Datenbankabfrage, dann Treeview erstellung usw.).

dann wirst Du sicher feststellen können, ob der Fehler immer von der
gleichen Stelle her kommt, und dann kann die Suche nach einer Ursache etwas
konkretisiert werden.

gruss

"Stefan M." wrote:

Hallo,

ich bekomme diesen Fehler nur manchmal und nicht nachvollziehbar.

Hier die Exception:


System.AccessViolationException wurde nicht behandelt.
Message="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."
Source="System.Windows.Forms"
StackTrace:
bei
System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr
wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
bei System.Windows.Forms.Control.DefWndProc(Message& m)
bei System.Windows.Forms.TreeView.WmMouseDown(Message& m,
MouseButtons button, Int32 clicks)
bei System.Windows.Forms.TreeView.WndProc(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei
System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32 pvLoopData)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32
reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext
context)
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[]
commandLine)
bei prog_hage.My.MyApplication.Main(String[] Args) in
17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain.nExecuteAssembly(Assembly assembly,
String[] args)
bei System.Runtime.Hosting.ManifestRunner.Run(Boolean
checkAptModel)
bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
bei
System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext
activationContext, String[] activationCustomData)
bei
System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext
activationContext)
bei
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
bei System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()



Es wird diese Sub durchlaufen:

Public Sub query(ByVal Programm As String)

Application.DoEvents()
TreeView1.Nodes.Clear()
TreeView2.Nodes.Clear()
TreeView3.Nodes.Clear()
TreeView4.Nodes.Clear()
Application.DoEvents()

Dim DBAdapter As System.Data.Odbc.OdbcDataAdapter = New
System.Data.Odbc.OdbcDataAdapter("SELECT xu.""xprog#"",
xp.""xprogname"" FROM pub.""xusedp"" xu , pub.""xprog"" xp WHERE
xp.""xprog#"" = xu.""xprog#"" AND xu.""xprog#used"" = '" & Programm &
"'", DBConnection)
Dim DBTable As DataTable = New DataTable
DBAdapter.Fill(DBTable)
TreeView1.BeginUpdate()
TreeView1.Nodes.Add(Programm, Programm)
Dim dr As System.Data.DataTableReader > DBTable.CreateDataReader()
While dr.Read
TreeView1.Nodes(Programm).Nodes.Add(dr.Item("xprog#"),
dr.Item("xprog#") & " " & dr.Item("xprogname"))
End While
TreeView1.Nodes(0).Expand()
TreeView1.EndUpdate()

DBTable.Clear()
DBAdapter.Dispose()
DBAdapter = Nothing

DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#used"", xp.""xprogname"" FROM pub.""xusedp"" xu ,
pub.""xprog"" xp WHERE xp.""xprog#"" = xu.""xprog#used"" AND
xu.""xprog#"" = '" & Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView2.BeginUpdate()
TreeView2.Nodes.Add(Programm, Programm)
While dr.Read
TreeView2.Nodes(Programm).Nodes.Add(dr.Item("xprog#used"),
String.Format("{0}", dr.Item("xprog#used")) & " " &
dr.Item("xprogname"))
End While
TreeView2.Nodes(0).Expand()
TreeView2.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

'Includes noch nicht rekursiv !
DBTable.Clear()
DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#used"" FROM pub.""xusedn"" xu WHERE xu.""xprog#"" = '" &
Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView3.BeginUpdate()
TreeView3.Nodes.Add(Programm, Programm)
While dr.Read
If dr.Item("xprog#used") <> "ELSE.I" And
dr.Item("xprog#used") <> "ENDE.I" And dr.Item("xprog#used") <>
"ENDIF.I" And dr.Item("xprog#used") <> "IFDEF.I" And
dr.Item("xprog#used") <> "IFNDEF.I" And dr.Item("xprog#used") <>
"IFSET.I" And dr.Item("xprog#used") <> "MESSAGE.I" And
dr.Item("xprog#used") <> "START.I" Then

TreeView3.Nodes(Programm).Nodes.Add(dr.Item("xprog#used"),
String.Format("{0}", dr.Item("xprog#used")))
End If
End While
TreeView3.Nodes(0).Expand()
TreeView3.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

'Includierte
DBTable.Clear()
DBAdapter = New System.Data.Odbc.OdbcDataAdapter("SELECT
xu.""xprog#"" FROM pub.""xusedn"" xu WHERE xu.""xprog#used"" = '" &
Programm & "'", DBConnection)
DBAdapter.Fill(DBTable)
dr = DBTable.CreateDataReader()
TreeView4.BeginUpdate()
TreeView4.Nodes.Add(Programm, Programm)
While dr.Read
TreeView4.Nodes(Programm).Nodes.Add(dr.Item("xprog#"),
String.Format("{0}", dr.Item("xprog#")))
End While
TreeView4.Nodes(0).Expand()
TreeView4.EndUpdate()
DBAdapter.Dispose()
DBAdapter = Nothing

end sub


Ich verwende DBAdapter und DBTable mehrmals, kann daher das Problem
kommen ?

Die Sub wird per Event im jedem TreeView aufgerufen, hier TreeView2:

Private Sub TreeView2_AfterSelect(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.TreeViewEventArgs) Handles
TreeView2.AfterSelect
Call query(TreeView2.SelectedNode.Name)
End Sub


Aber es passiert nicht generell und Multithreading verwende ich nicht.

Gruß
Stefan

Ähnliche fragen