Получение исключения в «Dim mdi as new MDIParent1» в VB.NET - PullRequest
0 голосов
/ 13 декабря 2011

Я получаю исключение в этом коде:

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

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Проблема в том, что у вас есть рекурсивный вызов, который никогда не заканчивается.

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).

1 голос
/ 13 декабря 2011

Когда вы создаете экземпляр MDIParent1, вы звоните getApplication().Когда вы звоните getApplication(), вы создаете новый экземпляр MDIParent1.Это бесконечная рекурсия, приводящая к исключению переполнения стека.

Что вы на самом деле пытаетесь сделать с этим кодом?

0 голосов
/ 13 декабря 2011

Получаете ли вы такое же исключение, если назначаете New отдельно от Dim?

Dim variable as DataType
// ...

Public Sub InitStuff()

    Set variable = New DataType
...