콜백 코딩을 C#에서 시작했고 이벤트 배선에 대리자를 사용했지만 콜백을 사용할 기회가 없었습니다. 콜백의 실제 적용은 무엇입니까? C++ 전제 조건없이 직접 콜백에 대해 설명하는 링크를 제공 할 수 있다면 고맙겠습니다.콜백 C#
콜백 C#
답변
콜백은 실제로 대리자, 즉 함수에 대한 참조입니다. 콜백은 종종 비동기 작업이 완료되면 호출자에게 알리기 위해 비동기 (멀티 스레드) 시나리오에서 사용됩니다. 비동기 메서드는 매개 변수로 콜백/위임을 가져오고 작업이 끝난 후이 델리게이트를 호출합니다 (즉 ). 뒤 ". 콜백/위임을 사용하면 호출자가 매개 변수를 전달하기 때문에 호출 된 작업을 결정할 수 있습니다.
예 :
사용자가 버튼을 클릭하여 장기 실행 작업을 시작, 당신이 WaitCursor에 마우스 포인터를 설정하고 다른 스레드에서 장기 실행 작업을 시작할 수 있습니다. 이제 마우스 포인터를 언제 정상적인 ArrowCursor로 재설정 할 수 있는지 어떻게 알 수 있습니까? 답변 : 콜백 사용. 커서를 화살표로 다시 설정 한 다음이 메서드에 대한 참조 (대리자)를 콜백 매개 변수로 전달하는 메서드를 만들면됩니다. 그런 다음이 메서드는 작업이 끝나고 커서가 다시 설정되면 호출됩니다.
실제로 이벤트는 일종의 콜백입니다. 특정 이벤트가 발생할 때 알림을받을 대리자를 등록합니다. 이 이벤트가 발생하면 은 제공된 대표를 사용하여으로 다시 전화합니다.
모든 비동기 작업은 콜백에 의존합니다.
콜백은 대리인이 함수 포인터입니다. 나는 스레드가 콜백을위한 전제 조건이라고 생각하지 않는다.
이들은 비 활동의 결과를 캡처하는 데 사용됩니다.
WPF에 익숙하다면 좋은 예가 종속성 속성입니다. 당신은 DependencyProperty.Register를 사용하여 다음 등록 :
public static DependencyProperty Register(
string name,
Type propertyType,
Type ownerType,
PropertyMetadata typeMetadata,
ValidateValueCallback validateValueCallback
)
는 마지막 매개 변수로서, 당신은 몇 가지 작업이 필요로 할 때 프레임 워크에 의해 라고 당신의 가 (값의 유효성을 검사) 할 수있는 기능을 전달합니다.
대리인은 콜백 후보로 이상적인 방법에 대한 참조를 보유합니다.
간단한 예를 들어 설명해 보겠습니다. Meditor 클래스는 컨트롤러가 로그인 할 수있는 채팅 서버처럼 작동합니다. 통신하기 위해, 컨트롤러는 콜백 메소드로 작동 할 메소드를 구현해야합니다.
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. C++ QThread 및 콜백 콜백 함수
- 2. C# 래퍼 및 콜백
- 3. C# 콜백 문제
- 4. C 타이머 콜백
- 5. DLL에서 C# 콜백
- 6. C#의 콜백
- 7. C# 마샬 콜백
- 8. C++의 타이머 콜백
- 9. C 함수의 D 콜백
- 10. 목표 C - UIImagePickerController를 콜백
- 11. 목표 C 콜백 실패
- 12. 클래스 포인터가없는 C- 콜백
- 13. C# ThreadTimer 콜백 객체
- 14. C++ 다중 콜백 함수
- 15. 콜백 SWIG C++ 바인딩
- 16. C# JsonResult에 콜백 추가
- 17. 클래스의 C++ 콜백 구문
- 18. Iphone, 콜백 및 목표 c
- 19. 이벤트 처리 C#/콜백 등록
- 20. SWIG를 통한 Wrap C 콜백
- 21. Objective-c setter/getter 콜백
- 22. objective-c 선택기를 통한 콜백
- 23. C#에서 콜백 재생이 완료되었습니다.
- 24. C++에서 Java 메소드에 콜백
- 25. 목표 C 콜백 및 알림
- 26. C++ DLL에 대한 콜백 C# 함수 구현
- 27. C Objectback-C (IOKIT)의 콜백
- 28. C#에서 C++ 로의 콜백 함수
- 29. C#에서의 C++ 콜백 중 NullReferenceException
- 30. jni의 콜백
내 대답이 도움이 되었습니까? 그렇다면 답변으로 표시하십시오. 감사. – gehho
안녕 다니엘, 응답을 선택하고 대답으로 표시 할 수 있습니까? –