Что такое Версия VB.NET этого Кода?

if (InvokeRequired)
{
  BeginInvoke(new MethodInvoker(delegate()
  {
    textBox1.Text = args.Fax.Port.ToString();
    textBox2.Text = args.Fax.FaxStatus.ToString();
  }));
}
7
задан Jon Seigel 21 April 2010 в 15:41
поделиться

6 ответов

From MSDN

Delegate Sub MyDelegate(myControl As Label, myArg2 As String)

Private Sub Button_Click(sender As Object, e As EventArgs)
   Dim myArray(1) As Object

   myArray(0) = New Label()
   myArray(1) = "Enter a Value"
   myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)
End Sub 

Public Sub DelegateMethod(myControl As Label, myCaption As String)
   myControl.Location = New Point(16, 16)
   myControl.Size = New Size(80, 25)
   myControl.Text = myCaption
   Me.Controls.Add(myControl)
End Sub 

Итак

if (InvokeRequired)
{
  BeginInvoke(new MethodInvoker(delegate()
  {
    textBox1.Text = args.Fax.Port.ToString();
    textBox2.Text = args.Fax.FaxStatus.ToString();
  }));
}

Delegate Sub MyDelegate(faxPort As String, faxStatus As String)

If InvokeRequired Then
    Dim aArray(1) as Object
    aArray(0) = args.Fax.Port.ToString()
    aArray(1) = args.Fax.FaxStatus.ToString();
    BeginInvoke(New MyDelegate(AddressOf MySub), aArray)
End If

Sub MySub( faxPort as String, faxStatus as String)
    textBox1.Text = faxPort
    textBox2.Text = faxStatus
End Sub

Я думаю

5
ответ дан 6 December 2019 в 10:48
поделиться

Предоставлено developerfusion.com :

If InvokeRequired Then
    BeginInvoke(New MethodInvoker(Function() Do
        textBox1.Text = args.Fax.Port.ToString()
        textBox2.Text = args.Fax.FaxStatus.ToString()
    End Function))
End If
5
ответ дан 6 December 2019 в 10:48
поделиться

VB.NET 9 и более ранние версии не поддерживают многострочные анонимные функции. Вам нужно написать отдельную функцию:

If InvokeRequired Then
    BeginInvoke(New MethodInvoker(AddressOf MySub))
End If

где MySub:

Sub MySub()
    textBox1.Text = args.Fax.Port.ToString()
    textBox2.Text = args.Fax.FaxStatus.ToString()    
End Sub

UPDATE:

Чтобы уточнить параметр args , существует перегрузка BeginInvoke , которую можно использовать и в этом случае делегат MethodInvoker больше не подходит. Action (Of T) будет работать:

If InvokeRequired Then
    BeginInvoke(New Action(Of SomeType)(AddressOf MySub), args)
End If

и:

Sub MySub(ByVal args as SomeType)
    textBox1.Text = args.Fax.Port.ToString()
    textBox2.Text = args.Fax.FaxStatus.ToString()    
End Sub

В конце концов, именно такие простые вещи делают разработчиков C # счастливыми :-) (пожалуйста, не поймите неправильно, я не имею ничего против VB.NET)

4
ответ дан 6 December 2019 в 10:48
поделиться

До Visual Studio 2010 VB.Net не поддерживает анонимные функции с несколькими операторами.

Вам нужно переместить анонимный метод в отдельный метод, который принимает args в качестве параметра, а затем вызвать для него Invoke .

3
ответ дан 6 December 2019 в 10:48
поделиться

Если вам нужны аналогичные элементы в этой функции, просто установите следующий компонент в свою визуальную студию. После этого вы можете легко конвертировать из C # в vb.net или из vb.net в C #. Поддержка VS2010 уже включена. http: //codeconvert.codeplex .com /

0
ответ дан 6 December 2019 в 10:48
поделиться

Поскольку комментарии не позволяют форматировать, я собираюсь опубликовать здесь свое рабочее решение. Спасибо всем, кто вмешался - Дарину, SLaks, drachenstern, Jay.

Private Sub myControl_FaxStatus(ByVal sender As Object, ByVal args As DataTech.FaxManNet.FaxEventArgs)
  frmModemStatus.UpdateStatus(args.Fax)

  If InvokeRequired Then
    Dim aArray(1) As Object
    aArray(0) = args.Fax.Port.ToString()
    aArray(1) = args.Fax.FaxStatus.ToString()
    BeginInvoke(New MyDelegate(AddressOf UpdateStatusDisplay), aArray)
  End If

  Try
    TextBox1.Text = args.Fax.Port.ToString()
    TextBox2.Text = args.Fax.FaxStatus.ToString()
  Catch ex As Exception
    System.Diagnostics.Debug.WriteLine("ex = " & ex.ToString())
  End Try

End Sub

Delegate Sub MyDelegate(ByVal faxPort As String, ByVal faxStatus As String)

Private Sub UpdateStatusDisplay(ByVal faxPort As String, ByVal faxStatus As String)
  TextBox1.Text = faxPort
  TextBox2.Text = faxStatus
End Sub
1
ответ дан 6 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: