Таким образом, из раздела комментариев, где этот код персоны был переведен в VB.NET на http://www.codeproject.com/KB/cs/Threadsafe_formupdating.aspx, он показывает небольшой код, помогающий в вызове кросс-потокового пользовательского интерфейса.
<System.Runtime.CompilerServices.Extension()> _
Public Function SafeInvoke(Of T As ISynchronizeInvoke, TResult)(ByRef isi As T, ByRef [call] As Func(Of T, TResult)) As TResult
If isi.InvokeRequired Then
Dim result As IAsyncResult = isi.BeginInvoke([call], New Object() {isi})
Dim endResult As Object = isi.EndInvoke(result)
Return DirectCast(endResult, TResult)
Else
Return [call](isi)
End If
End Function
При попытке вызвать следующее сообщение об ошибке:
Me.SafeInvoke(Function(x) x.Close())
или
frmLobby.SafeInvoke(Function(x) x.Close())
Ошибка 1 Тип (ы) данных параметра (ов) типа в методе расширения 'Открытая функция SafeInvoke (Of TResult) (вызов ByRef As System.Func (Of frmLogin, TResult)) As TResult', определенный в 'GvE. Глобалы не могут быть выведены из этих аргументов. Явное указание типа данных может исправить эту ошибку. C: \ GvE \ GvE \ frmLogin.vb 37 9 GvE
Чего мне не хватает? Я вызываю этот код из метода, определенного в форме, но этот метод вызывается из другого потока.
Просто пытаюсь избежать делегатов, и это то, что должен делать приведенный выше код, но просто не может заставить его работать.
Спасибо