Входящият низ не беше в правилен формат vb net

Това наистина ме обърква, тъй като не правя нищо със Strings.

Това са подробностите, които дебъгерът ми връща:

System.FormatException was unhandled Message=Въведеният низ не е в правилен формат. Източник=System.Windows.Forms StackTrace: в System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) в System.Windows.Forms.Control.Invoke(Delegate method, 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\Projects\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(Object userData) в System.Runtime.CompilerServices.Run timeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode код, CleanupCode backoutCode, Object userData) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Threading.ExecutionContext.Run(ExecutionContext callback executionCall state, Objectback at System.Net.ContextAwareResult.Complete(IntPtr userToken) в System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) в System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* native) в Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) InnerException:

По принцип има под, наречен AddContact в потребителски контрол (ContactList), който взема 3 низа и ги поставя в друг USerControl (Контакт) и след това добавя контакта към ContactList. Списъкът с контакти е в главния формуляр и се стартира 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

и това е редът с 2-те астерикса (всъщност не в кода), който очевидно причинява проблемите

    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

Така че някаква идея защо се казва Input string не е в правилен формат? (о, и ако хвана изключението (с Try and Catch) и не напиша нищо в секцията catch, то просто продължава и работи правилно, без да се счупи.


person Jonathan.    schedule 29.10.2009    source източник


Отговори (1)


Заменете .Invoke с .BeginInvoke и .EndInvoke, за да получите истинското проследяване на стека. (Само за целите на отстраняване на грешки, можете да го промените обратно по-късно. Вижте тук.)

person Heinzi    schedule 29.10.2009