2013-07-15 4 views
1

так что я получаю эту ошибку о том, что я получаю System.InvalidOperationException здесь полная ошибка:Visual Basic System.InvalidOperationException

[Managed to Native Transition] 
Port Scan.exe!WindowsApplication1.My.MyProject.MyForms.Form1.get() 
Port Scan.exe!WindowsApplication1.My.MyApplication.OnCreateMainForm() 
    Microsoft.VisualBasic.dll!Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicatio Base.OnRun() 
Microsoft.VisualBasic.dll!Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplication Base.DoApplicationModel() 
Microsoft.VisualBasic.dll!Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplication Base.Run(string[] commandLine) 
[Native to Managed Transition] 
mscorlib.dll!System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationCo ntext activationContext, string[] activationCustomData) 
    Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.H ostProc.RunUsersAssemblyDebugInZone() 
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContex t executionContext, System.Threading.ContextCallback callback, object state, bool  preserveSyncCtx) 
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext  executionContext, System.Threading.ContextCallback callback, object state) 
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() 
[Native to Managed Transition] 

и вот код, который я пытаюсь скомпилировать его для порта сканер

Public Class Form1 
Dim host As String 

Dim counter As Integer 
Dim portmin As Integer = TextBox3.Text 
Dim portmax As Integer = TextBox2.Text 
Private Sub Form1_Load(ByVal sender As System.Object, _ 
      ByVal e As System.EventArgs) Handles MyBase.Load 
    Button1.Enabled = False 
    'set counter explained before to 0 
    counter = 0 
End Sub 
Private Sub Timer1_Tick(ByVal sender As System.Object, _ 
     ByVal e As System.EventArgs) Handles Timer1.Tick 
    'Set the host and port and counter 
    counter = counter + 1 'counter is for the timer 
    host = TextBox1.Text 



    For port As Integer = portmin To portmax 

     If (port = portmax) Then 
      Exit For 
     End If 



     ' Next part creates a socket to try and connect 
     ' on with the given user information. 

     Dim hostadd As System.Net.IPAddress = _ 
      System.Net.Dns.GetHostEntry(host).AddressList(0) 
     Dim EPhost As New System.Net.IPEndPoint(hostadd, port) 
     Dim s As New System.Net.Sockets.Socket(_ 
     System.Net.Sockets.AddressFamily.InterNetwork, _ 
    System.Net.Sockets.SocketType.Stream, _ 
     System.Net.Sockets.ProtocolType.Tcp) 
     Try 
      s.Connect(EPhost) 
     Catch 
     End Try 
     If Not s.Connected Then 
      ListBox1.Items.Add("Port " + port.ToString + " is not open") 
     Else 
      ListBox1.Items.Add("Port " + port.ToString + " is open") 
      ListBox2.Items.Add(port.ToString) 

     End If 
     Label3.Text = "Open Ports: " + ListBox2.Items.Count.ToString 
    Next 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, _ 
      ByVal e As System.EventArgs) Handles Button1.Click 
    'stop button 
    Timer1.Stop() 
    Timer1.Enabled = False 
    Button1.Enabled = True 
    Button2.Enabled = False 
End Sub 

Private Sub Button2_Click(ByVal sender As System.Object, _ 
    ByVal e As System.EventArgs) Handles Button2.Click 
    ListBox1.Items.Add("Scanning: " + TextBox1.Text) 
    ListBox1.Items.Add("-------------------") 
    Button2.Enabled = True 
    Button1.Enabled = False 
    Timer1.Enabled = True 
    Timer1.Start() 
End Sub 

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 

End Sub 

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged 

End Sub 

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged 

End Sub 
End Class 

Я очень ценю вашу помощь, как я застрял на этой ошибке в течение некоторого времени и не могу построить ех. Кажется, что ошибка происходит только тогда, когда я делаю цикл for, чтобы разрешить минимальный и максимальный номер порта.

+0

Каковы значения 'portmin' (' TextBox3.Text') и 'portmax' (' TextBox2.Text')? –

ответ

4

Проблема в этом коде:

Dim portmin As Integer = TextBox3.Text 
Dim portmax As Integer = TextBox2.Text 

В то время эти утверждения исполнения, форма еще не полностью построен. TextBox2 и TextBox3 еще не созданы. Вы пытаетесь присвоить значение Nothing целочисленному значению. Это запрещено. Переместите назначения в событие загрузки формы. Также найдите время, чтобы проверить и убедиться, что содержимое этих полей преобразуется в целое число.

+0

Не очень уверен, что «переместить его на событие« Загрузить »- это хороший совет. Пользователь все еще не успел ввести значения. И в гораздо более неприятном режиме отказа, исключения в обработчике события нагрузки, как правило, проглатываются. Лучше всего использовать кнопку «Пуск». –

+0

Спасибо за сверхбыстрый ответ – Gabe

+0

@Gabe. Также зайдите в свои свойства проекта и включите опцию Strict On или установите Option Strict On в верхней части вашего кода. –