我在这段代码中得到一个异常:
Imports System.Windows.Forms
Imports System.Text
Imports System.Diagnostics
Public Class MDIParent1
Private Sub MDIParent1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
getapp.getApplication()
End Sub
Public Sub MDIParent1(ByVal value As String, ByVal value1 As String)
Dim ChildForm As New System.Windows.Forms.Form
ChildForm.MdiParent = Me
ChildForm.Text = value1
ChildForm.Show()
End Sub
End Class
Public Class getApplications
Dim w As String
Dim b As New Process()
Dim p As String
Dim mdi As New MDIParent1 'here i am getting exception that is System.StackOverflowException was unhandled InnerException:..
Dim i As Integer
Public Sub getApplication()
For Each Me.b In Process.GetProcesses(".")
Try
If b.MainWindowTitle.Length > 0 Then
p = b.ProcessName.ToString()
w = b.MainWindowTitle().ToString()
mdi.MDIParent1(p, w)
End If
Catch
End Try
Next
End Sub
End Class
问题是您有一个永远不会结束的递归调用。
MDIParent1.MDIParent1()调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),这电话MDIParent1.MDIParent1(),它再次调用getApplications.getApplication(),
等等直到无穷大(或者直到系统抛出StackOverflowException)。
创建MDIParent1
的实例时,调用getApplication()
。当您调用getApplication()
时,您创建了MDIParent1
的一个新实例。这是一个无限递归,会导致堆栈溢出异常。
你实际上试图用这段代码做什么?
如果你分别从Dim中分配New,你会得到相同的Exception吗?
Dim variable as DataType
// ...
Public Sub InitStuff()
Set variable = New DataType