c# - 使用 C# 在用户定义的库中实现回调

标签 c# winforms

您好,我有一些与用户在 c# 中创建的库中的回调功能相关的问题

  1. 我已经创建了一个名为 "Sample"
  2. 的 winform 应用程序
  3. 我还创建了一个名为"Library"
  4. 的类库
  5. 示例仅包含一个带有按钮的表单 “CALL”
  6. 我已经在库中实现了所有编码部分
  7. 当我单击表单上的调用按钮时,将调用库的方法“ACTIVATE CALL”。
  8. 此方法在线程上执行一些工作。
  9. 我想要的是当线程工作完成时必须调用放置在我的 winform 中的“CALLBACK”方法。
  10. 为此,我已将表单的“this”引用传递给图书馆
  11. 我在图书馆的正式辩论中将“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/

相关文章:

c# - 鼠标悬停时图像闪烁

c# - 如何检索 Access 查询的查询定义(SQL 文本)并存储回已更改的定义

c# - 在随机生成的迷宫上使用递归回溯

c# - 无法在静态上下文中访问非静态字段 'lblSystemStatus'

c# - 如何打印表格的特定区域?

c# - 如何从某个端口上的服务器获取所有可用链接?

c# - 如何将资源嵌入到 appx 包中?

c# - 用户控件 - 自定义属性

c# - 将击键发送到程序,即使它在后台使用 c#

c# - ASP.NET MVC 5 实体连接