У меня есть метод, который асинхронно вызывается, когда завершается System.Net.Sockets.NetworkStream.BeginRead.Взаимодействие с потоком пользовательского интерфейса от метода обратного вызова Async?
skDelegate = New AsyncCallback(AddressOf skDataReceived)
skStream.BeginRead(skBuffer, 0, 100000, skDelegate, New Object)
В этом методе обратного вызова мне необходимо взаимодействовать с потоком пользовательского интерфейса.
Sub skDataReceived(ByVal result As IAsyncResult)
CType(My.Application.OpenForms.Item("frmMain"), frmMain).refreshStats(d1, d2)
End Sub
Это вызывает исключение после завершения метода. (При End Sub выполняется)
Операция отмены обнаружена контекст, который отличается от того, что был применен в соответствующем множестве операции. Возможная причина заключается в том, что контекст был установлен в потоке, а не отменен (отменен).
Как я могу взаимодействовать с потоком пользовательского интерфейса из метода обратного вызова? Что я делаю не так?
Если Я вызываю непосредственно на frmMain, я получаю сообщение об ошибке, указывающее, что вызовы могут быть вызваны только на элемент управления после создания дескриптора окна. Поэтому я попытался использовать форму в коллекции OpenForms, но потом получаю ту же самую старую ошибку: «Операция отмены ...» Что я делаю неправильно? –
Другими словами, ваше «решение» делает * НЕ * решает мою основную проблему, InvalidContextException. В любом случае, я нашел ответ на этот вопрос, если кто-нибудь встретит это снова. См. Мой ответ ниже. –
Итак, в основном, я думаю, что этот код выполняется до того, как Windows создала дескриптор Win32 для окна формы. Мне любопытно, отображается ли окно до запуска этого кода? –