我开始使用C#编写代码,并且从来没有机会使用回调函数,尽管我使用委托进行事件接线。什么是回调的真正应用。如果您可以提供一些链接,以简单直接的方式解释回调而无需C++先决条件,我将不胜感激。C#中的回调函数#
5
A
回答
9
回调实际上是一个委托,即对函数的引用。回调通常用于异步(多线程)场景,以在异步操作完成时通知调用者:异步方法获取回调/委托作为参数,并在其完成工作后调用该委托,即它调用“调用回“。使用回调/委托使调用者可以决定调用哪个操作,因为他传递了参数。
例子:
当用户通过点击一个按钮,启动一个长期运行的操作,你可以设置鼠标指针WaitCursor,并开始在另一个线程的长时间运行的操作。现在,您如何知道何时可以将鼠标指针重置为正常的ArrowCursor?答:使用回调。您只需创建一个将光标重置为箭头的方法,然后将对此方法(委托)的引用作为回调参数传递。然后在操作完成时调用此方法,并且您的光标被重置。
事实上,事件也是某种回调:你注册了一个委托,当某个事件发生时被通知。当这个事件发生时,你使用提供的代表回拨。
1
任何异步操作都将依赖于回调。
1
回调是一个委托是一个函数指针。我不认为线程是回调的先决条件。
0
它们用于捕获异步操作的结果。
1
如果您熟悉WPF,一个很好的例子是依赖属性。你注册,然后使用DependencyProperty.Register:
public static DependencyProperty Register(
string name,
Type propertyType,
Type ownerType,
PropertyMetadata typeMetadata,
ValidateValueCallback validateValueCallback
)
作为最后一个参数,你传递一个函数来完成你的由框架当某些工作需要叫(验证值)。
0
委托持有一个方法的引用,使其成为回调的理想候选者。
我试图用一个简单的例子来解释它: 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#中的回调函数
- 2. C++中的回调函数
- 3. C#中的回调函数#
- 4. C++回调函数
- 5. 在C#中返回php回调函数
- 6. C函数中的D回调
- 7. C++中的定时器回调函数
- 8. C++中的VC++ __stdcall回调函数#
- 9. C#MixerOpen与回调函数
- 10. C++回调类函数
- 11. 回调函数设计C++
- 12. C++多个回调函数
- 13. C++函数指针和回调函数
- 14. 在c库的回调函数中调用C++对象
- 15. 在C++中分配回调函数
- 16. 使用C++类的成员函数为C回调函数
- 17. NullReferenceException在C++回调C#函数期间
- 18. 在C#中调用C dll函数,结构体和回调函数
- 19. 在C++ DLL中调用Delphi中的回调函数
- 20. C++到vb.net,回调函数的问题
- 21. C++:具有状态的回调函数
- 22. 成员函数的C++回调
- 23. Objective-C iOS之间的回调函数
- 24. 将delphi的C++回调函数导入
- 25. node.js中的回调函数
- 26. CodeIgniter中的回调函数
- 27. dojo.io.script.get中的回调函数
- 28. 回调函数中的AttributeError
- 29. java中的回调函数
- 30. nextAll()中的回调函数
我的答案在下面有帮助吗?如果是这样,请将其标记为答案。谢谢。 – gehho 2010-04-14 06:24:45
嗨丹尼尔,你能选择一个答案并将其标记为答案。 – 2010-04-14 13:52:06