Это действительно смущает меня, так как я ничего не делаю со строками.
Вот подробности, которые мне возвращает отладчик:
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, то он просто продолжится и работает без сбоев.