Empecé a codificar en C# y nunca he tenido la oportunidad de utilizar devoluciones de llamada, aunque he utilizado delegados para el cableado de eventos. Cuál es la aplicación real de las devoluciones de llamada. Le agradecería si pudiera proporcionar algún enlace que explique las devoluciones de llamadas de manera directa sin los requisitos previos de C++.Devolución de llamada en C#
Respuesta
Una devolución de llamada es en realidad un delegado, es decir, una referencia a una función. Las devoluciones de llamada se utilizan a menudo en escenarios asíncronos (de subprocesos múltiples) para notificar al llamante cuando finaliza la operación asíncrona: el método asíncrono obtiene una devolución de llamada/delegado como parámetro y llama a este delegado una vez que ha finalizado su trabajo, es decir, "llamadas volver ". El uso de devoluciones/delegados permite que la persona que llama decida a qué operación se llama porque transfiere los parámetros.
Ejemplo:
Cuando el usuario inicia una operación de larga ejecución haciendo clic en un botón, se puede establecer el puntero del ratón a un WaitCursor e iniciar la operación de larga ejecución en otro hilo. Ahora, ¿cómo sabe cuándo puede restablecer el puntero del mouse al ArrowCursor normal? Respuesta: utilizando devoluciones de llamada. Simplemente crea un método que restablece el cursor a una flecha y luego pasa una referencia a este método (un delegado) como el parámetro de devolución de llamada. A continuación, se llama a este método cuando finalizó la operación y se restablece el cursor.
En realidad, los eventos también son un tipo de devoluciones de llamada: registra un delegado para recibir notificaciones cuando se produce un determinado evento. Cuando ocurre este evento, usted es llamado de nuevo usando el delegado proporcionado.
Cualquier acción asincrónica se basará en una devolución de llamada.
Una devolución de llamada es un delegado es un puntero de función. No creo que los hilos sean un requisito previo para las devoluciones de llamada.
Se utilizan para capturar los resultados de una acción ascrona.
Si está familiarizado con WPF, un buen ejemplo son las Propiedades de dependencia. Se registra a continuación, utilizando DependencyProperty.Register:
public static DependencyProperty Register(
string name,
Type propertyType,
Type ownerType,
PropertyMetadata typeMetadata,
ValidateValueCallback validateValueCallback
)
como el último parámetro, se pasa una función de los suyos que se llama por el marco cuando un trabajo que hay que hacer (validar el valor).
Delegate contiene una referencia a un método que lo hace el candidato ideal para la devolución de llamada.
He intentado explicarlo con un simple ejemplo: La clase Meditor actúa como un servidor de chat donde los controladores pueden iniciar sesión. Para comunicarse, los controladores deben implementar un método que actuará como método de devolución de llamada.
public class Mediator
{
//instruct the robot to move.
public delegate void Callback(string sender, string receiver, Message msg);
Callback sendMessage;
//Assign the callback method to the delegate
public void SignOn(Callback moveMethod)
{
sendMessage += moveMethod;
}
public void SendMessage(string sender, string receiver, string msg)
{
sendMessage(sender, receiver, msg);
}
}
public class Controller : Asset
{
string readonly _name;
Mediator _mediator;
public Controller(Mediator m, string name)
{
_name = name;
_mediator = m;
//assign the call back method
_mediator.SignOn(Notification);
}
public void Notification(string sender, string receiver, string msg)
{
if (receiver == _name)
{
Console.WriteLine("{0}: Message for {1} - {2}".FormateText(sender,
receiver, msg)); //I have create extension method for FormatText.
}
}
public void Mobilize(string receiver, string msg)
{
_mediator.SendMessage(_name, receiver, msg);
}
}
static void Main(string[] args)
{
Mediator mediator;
mediator = new Mediator();
//accept name here...
Controller controller1 = new Controller(mediator, "name1");
Controller controller2 = new Controller(mediator, "name2");
controller1.Mobilize("name2","Hello");
controller1.Mobilize("name1", "How are you?");
}
output will be:
name1: Message for name2 - Hello
name2: Message for name1 - How are you?
- 1. devolución de llamada en C#, orden de llamada y devolución
- 2. Devolución de llamada en C#
- 3. C# C++ devolución de llamada de interoperabilidad
- 4. SWIG enlaces C++ con devolución de llamada
- 5. devolución de llamada en android?
- 6. Implementación de funciones de devolución de llamada en C
- 7. Devolución de llamada asincrónica
- 8. C++: typedefs de devolución de llamada con __stdcall en MSVC
- 9. devolución de llamada desde C++ al objetivo c
- 10. ¿Cómo implemento una devolución de llamada en C++?
- 11. Cómo realizar una devolución de llamada en Objective-C
- 12. Devolución de llamada polimórfica en Emacs/Elisp
- 13. Devolución de llamada asíncrona concurrente
- 14. Observadores vs. Devolución de llamada
- 15. jQuery remove() devolución de llamada?
- 16. ¿cómo puedo activar la devolución de llamada de error ajax en la devolución de llamada exitosa?
- 17. $ envío (este) en una devolución de llamada
- 18. Devolución de llamada en transición CSS
- 19. AVAudioPlayer prepareToPlay devolución de llamada en iPhone
- 20. onError devolución de llamada en websockets
- 21. Espere devolución de llamada en javascript
- 22. Devolución de llamada orientada a objetos para C++?
- 23. C# HttpRequest asíncrono múltiple con una devolución de llamada
- 24. Devolución de llamada desde Delphi dll a la aplicación C#
- 25. Qt QWEBview JavaScript de devolución de llamada
- 26. Devolución de llamada sincrónica y asíncrona
- 27. Java ServerSocketChannel SocketChannel (Devolución de llamada)
- 28. devolución de llamada de animación jquery - cómo pasar parámetros a la devolución de llamada
- 29. DropDownListPara devolución de llamada o declaración if
- 30. Llamar a MiniDumpWriteDump con devolución de llamada
¿La respuesta que encuentras debajo te puede ayudar? Si es así, márcalo como respuesta. Gracias. – gehho
Hola Daniel, ¿Puedes seleccionar una respuesta y marcarla como respuesta? –