Pregunta

Por lo tanto, me estaba poniendo de nuevo en un poco de programación .NET, ya través de una nueva característica en VS.NET 2010, se detectó un caso en el que yo estaba tratando de modificar un control de un hilo que no crean que el control, y me señaló a un artículo en MSDN sobre cómo hacer esto correctamente ...

' HOW TO WRITE TO A FORM CONTROL FROM A THREAD THAT DIDN'T CREATE THE CONTROL
' ===========================================================================
' Say you need to write to a UI text box that logs stuff...
Delegate Sub WriteLogDelegate(ByVal [text] As String)
Private Sub WriteLog(ByVal [text] As String)
    If Me.rtfLog.InvokeRequired Then
        ' We are not in the same thread!
        ' Create new WriteLogDelegate and invoke it on the same thread
        Dim d As New WriteLogDelegate(AddressOf WriteLog)
        Me.rtfLog.Invoke(d, New Object() {[text]})
    Else
        ' We are totally in the same thread...
        ' Call AppendText like normal!
        Me.rtfLog.AppendText([text])
    End If
End Sub

Y yo estaba tan emocionado porque he estado intrigado por la manera de hacer esto para como 5 años debido a las versiones anteriores de vs.net no decayó esto desde que era un estudiante universitario en un proyecto y ...

Um ... Lo siento combate que. Compostura recuperó. De todos modos, ahora que sé que este fragmento de NET-fu, me gustaría aprender más acerca de lo que está pasando y cómo funciona.

¿Dónde puedo encontrar el código para Invoke () en .NET Reflector?

¿Fue útil?

Solución

Bueno, vamos a nombrar todo lo que sucede en su ejemplo.

  1. El código que se muestra no es la rosca o multi-threading de programación . (que existe desde el principio de la dotnet).
  2. rtfLog es el uso de las capacidades estándar de InvokeRequired -. Esto es media, rtfLog que hereda de la clase de control
    2.a. clase Control es parte de la estructura Winforms.
  3. Para llegar al código que "' No estamos en el mismo hilo!" es necesario crear dos o más Hilos .

En general, el reflector se puede mostrar la aplicación, pero la idea se puede encontrar en artículo .
Si shure que desea ver la aplicación, simplemente compilar un código corto, como en respuesta "código de poeta", y la mirada en él en reflector . (verifico esta parte, el reflector le mostrará algo que muy cerca de su código original.)

Otros consejos

Esto debería ser un comentario, pero no puede formato de código en los comentarios así que ....

Si estaba utilizando c # esta historia podría ser aún más simple ..

private void WriteLog(string text)
{
  if(InvokeRequired)
  {
    BeginInvoke(new MethodInvoker(()=>{ WriteLog(text); }));
  }
  else
  {
    rtfLog.AppendText(text);
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top