您好,我有一些与用户在 c# 中创建的库中的回调功能相关的问题
- 我已经创建了一个名为 "Sample" 的 winform 应用程序
- 我还创建了一个名为"Library" 的类库
- 示例仅包含一个带有按钮的表单 “CALL”
- 我已经在库中实现了所有编码部分
- 当我单击表单上的调用按钮时,将调用库的方法“ACTIVATE CALL”。
- 此方法在线程上执行一些工作。
- 我想要的是当线程工作完成时必须调用放置在我的 winform 中的“CALLBACK”方法。
- 为此,我已将表单的“this”引用传递给图书馆
- 我在图书馆的正式辩论中将“this”收集为 obj“Object”类型。
有人可以建议我如何调用回调方法吗?
我试过这个:
if(obj.GetType()== typeOf(what to specify here))
{
obj.callback();
}
希望有人能提供帮助。 注意:库和示例都是不同的项目 如何实现回调功能?
最佳答案
使用回调定义您的库方法。
public void ACTIVATE(object arg, object arg, Action callback)
{
// Do what you have to do here.
callback.Invoke();
}
然后,在您的 Sample WinForms 客户端中,您可以这样调用。
public void MethodInSample()
{
Library lib = new Library();
Action callback = () => { DoSomethingHere };
Lib.ACTIVATE(1,1,callback);
}
如果您希望回调返回一些参数,您可以改用 Func<> 并以这种方式定义参数。
或者,您可以使用事件。 BackgroundWorker 对象就是一个很好的例子。此类有一个名为 RunWorkerAsync() 的方法,它会导致在后台线程上完成一些工作。然后有一个名为 RunWorkerCompleted 的事件,您可以监听该事件以指示后台线程何时完成。
我认为这两种方法都是有效的,但第二种方法的好处是允许多方监听以完成工作。
关于c# - 使用 C# 在用户定义的库中实现回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742656/