Входная строка была не в правильном формате vb net - PullRequest
1 голос
/ 29 октября 2009

Это действительно смущает меня, так как я ничего не делаю со строками.

Вот подробности, которые мне возвращает отладчик:

System.FormatException не обработан Сообщение = Входная строка была в неправильном формате. Источник = System.Windows.Forms Трассировки стека: в System.Windows.Forms.Control.MarshaledInvoke (вызывающий элемент управления, метод Delegate, аргументы Object [], логическое синхронное значение) в System.Windows.Forms.Control.Invoke (метод Delegate, Object [] args) в Receiver.Class1.CrossThreadAddControl (Control ControlToAdd, Control BaseControl) в C: \ Users \ Jonathan \ Documents \ Visual Studio 2010 \ Projects \ Receiver \ Receiver \ Class1.vb: строка 28 в Receiver.ContactList.AddContact (контактный пользователь) в C: \ Users \ Jonathan \ Documents \ visual studio 2010 \ Проекты \ Receiver \ Receiver \ ContactList.vb: строка 25 в Receiver.Form1.MySub (IAsyncResult ar) в C: \ Users \ Jonathan \ Documents \ Visual Studio 2010 \ Projects \ Receiver \ Receiver \ Form1.vb: строка 45 в System.Net.LazyAsyncResult.Complete (IntPtr userToken) в System.Net.ContextAwareResult.CompleteCallback (состояние объекта) в System.Threading.ExecutionContext.runTryCode (объект userData) в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (код TryCode, код возврата CleanupCode, объект userData объекта) в System.Threading.ExecutionContext.RunInternal (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Net.ContextAwareResult.Complete (IntPtr userToken) в System.Net.LazyAsyncResult.ProtectedInvokeCallback (Объектный результат, IntPtr userToken) в System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback (код ошибки UInt32, numBytes UInt32, NativeOverlapped * nativeOverlapped) в System.Threading._IOCompletionCallback.PerformIOCompletionCallback (код ошибки UInt32, numBytes UInt32, NativeOverlapped * pOVERLAP) InnerException:

По сути, в usercontrol (ContactList) есть подпрограмма AddContact, которая берет 3 строки и помещает их в другой USerControl (Contact), а затем добавляет Contact в ContactList. Список контактов находится в главной форме, а Sub AddContact Sub запускается из другого потока, поэтому необходима вещь Invoke.

    Public Class ContactList

       Sub AddContact(ByVal user As Contact)

        If Me.Controls.Count = 0 Then
            user.Location = New Drawing.Point(0, 0)
        Else
            user.Location = New Drawing.Point(0, Me.Controls.Count * 20)
        End If
        user.Width = Me.Width
        user.Displayname = user.Username
        For Each UC As Control In Me.Controls
            If TypeOf UC Is Contact Then
                If CType(UC, Contact).Username = user.Username Then
                    user.Displayname = user.Username & "@" & user.PCname
                End If

            End If
        Next
        Class1.CrossThreadAddControl(user, Me)

    End Sub
End Class

и именно эта строка с двумя звёздочками (а не в коде на самом деле), по-видимому, вызывает проблемы

    Shared Sub CrossThreadAddControl(ByVal ControlToAdd As Control, ByVal BaseControl As Control)
    If BaseControl.InvokeRequired Then
        Dim d As New AddUserD(AddressOf AddUser)
    **BaseControl.Invoke(d, ControlToAdd, BaseControl)**



    End If
End Sub
Delegate Sub AddUserD(ByVal ControlToAdd As Control, ByVal BaseControl As Control)
Shared Sub AddUser(ByVal ControlToAdd As Control, ByVal BaseControl As Control)
    BaseControl.Controls.Add(ControlToAdd)
End Sub

Так какая-нибудь идея, почему она говорит, что входная строка не была в правильном формате? (о, и если я поймаю исключение (с помощью Try и Catch) и ничего не напишу в секции catch, то он просто продолжится и работает без сбоев.

1 Ответ

2 голосов
/ 29 октября 2009

Замените .Invoke на .BeginInvoke и .EndInvoke, чтобы получить real stacktrace. (Только для целей отладки вы можете изменить его позже. См. здесь .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...