问题标签 [delegates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1566 浏览

Windows 窗体线程和事件 - ListBox 及时更新,但进度条出现巨大延迟

我们的团队正在创建一个新的招聘工作流程系统来替换旧的。我的任务是将旧数据迁移到新模式中。我决定通过创建一个小型 Windows 窗体项目来做到这一点,因为架构完全不同,直接的 TSQL 脚本不是一个合适的解决方案。

完成这项工作的主要密封类“ImportController”声明了以下委托事件:

主窗口使用新线程在该类中启动一个静态方法:

ImportProgressEvent 参数携带字符串消息、进度条的最大 int 值和当前进度 int 值。Windows 窗体订阅该事件:

并使用它自己的委托以这种方式响应事件:

最后更新进度条和列表框:

问题是 ListBox 似乎更新得很快,但进度条永远不会移动,直到批处理几乎完成?是什么赋予了 ?

0 投票
6 回答
30074 浏览

侦听另一个应用程序中的事件

假设我有两个用 C# 编写的应用程序。第一个是引发名为“OnEmailSent”的事件的第三方应用程序。

第二个是我编写的自定义应用程序,我想以某种方式订阅第一个应用程序的“OnEmailSent”。

有什么方法可以将第二个应用程序附加到第一个应用程序的实例以侦听“OnEmailSent”事件?


因此,为了进一步澄清,我的具体情况是我们有一个用 c# 编写的自定义第三方应用程序,它引发了一个“OnEmailSent”事件。我们可以使用反射器看到事件存在。

我们想要做的是在该组件发送电子邮件时执行一些其他操作。

我们能想到的最有效的方法是能够使用安德斯建议的某种形式的 IPC,并监听第三方组件引发的 OnEmailSent 事件。

因为该组件是用 C# 编写的,所以我们正在考虑编写另一个 C# 应用程序,该应用程序可以将自己附加到正在执行的进程中,并且当它检测到 OnEmailSent 事件已被引发时,它将执行它自己的事件处理代码。


我可能遗漏了一些东西,但根据我对远程处理工作原理的理解,需要有一个服务器来定义客户端可以订阅的某种合同。

我更多地考虑有人编写了一个独立的应用程序,例如 Outlook,它公开了我想从另一个应用程序订阅的事件。

我想我正在考虑的场景是 .net 调试器以及它如何附加到执行程序集以在运行时检查代码。

0 投票
6 回答
3490 浏览

有和没有“新”的接线事件之间的区别

在 C# 中,这两行代码有什么区别(如果有的话)?

两者的工作方式似乎完全相同。当您键入后者时,C# 是否只是假设您的意思是前者?

0 投票
11 回答
142070 浏览

代表和事件之间有什么区别?

代表和事件之间有什么区别?不是都持有对可以执行的函数的引用吗?

0 投票
8 回答
47393 浏览

我在哪里使用代表?

现实世界中有哪些地方需要代表?我很好奇这种方法是最佳解决方案的情况或模式。无需代码。

0 投票
15 回答
277022 浏览

Java 代表?

Java 语言是否具有委托功能,类似于 C# 对委托的支持?

0 投票
9 回答
33489 浏览

C# 动态事件订阅

您将如何动态订阅 C# 事件,以便给定一个 Object 实例和一个包含事件名称的 String 名称,您订阅该事件并在该事件被触发时执行某些操作(例如写入控制台)?

使用 Reflection 似乎是不可能的,如果可能的话,我想避免使用 Reflection.Emit,因为目前(对我来说)这似乎是唯一的方法。

/编辑:我不知道事件所需的代表签名,这是问题的核心

/ EDIT 2:虽然委托逆变似乎是一个好计划,但我无法做出使用此解决方案所必需的假设

0 投票
4 回答
33033 浏览

你如何声明一个谓词委托内联?

所以我有一个包含一些字段的对象,这并不重要。我有这些对象的通用列表。

所以我想根据一些标准从我的列表中删除对象。例如,myObject.X >= 10. 我想使用 for 的RemoveAll(Predicate<T> match)方法来做到这一点。

我知道我可以定义一个可以传递给 RemoveAll 的委托,但我想知道如何用匿名委托定义这个内联,而不是创建一堆只在一次地方使用的委托函数。

0 投票
4 回答
24919 浏览

将此委托转换为匿名方法或 lambda

我是所有匿名功能的新手,需要一些帮助。我已经完成了以下工作:

但这完全是丑陋的,如果可能的话,我希望 Do 的内部成为一个匿名方法,甚至是一个 lambda。我试过:

但这些给了我

无法将匿名方法转换为类型“System.Delegate”,因为它不是委托类型** 编译错误。

我究竟做错了什么?


由于 Mark Ingram 发布的内容,尽管没有人明确表示,但似乎最好的答案是这样做:

0 投票
9 回答
1154 浏览

这个委托调用在这行代码(C#)中做了什么?

这是来自 agsXMPP .Net 程序集随附的示例。我已经阅读了代表,但不确定这与这行代码(等待登录发生,然后发送消息。我想我正在寻找的是理解为什么delegate(0)完成这个,用我能理解的那种简单的话来说。