问题标签 [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 投票
10 回答
18599 浏览

c# - 用委托或 lambda 包装秒表计时?

我正在编写这样的代码,做一些快速而肮脏的时间:

当然有一种方法可以将这段时间代码称为花哨的 .NET 3.0 lambda,而不是(上帝禁止)剪切和粘贴几次并替换DoStuff(s)DoSomethingElse(s)?

我知道它可以做到,Delegate但我想知道 lambda 方式。

0 投票
8 回答
3398 浏览

c# - 执行顺序方法的最佳方法是什么?

处理一个必须每秒钟运行一组顺序方法的项目x。现在,我将方法包含在另一个“父方法”中,然后依次调用它们。

在执行下一步之前,每个方法都必须成功运行且不引发异常。while所以现在我用and包装了这些方法中的每一个try..catch,然后catch再次执行该方法。

这看起来很臭,而且不是很干。有没有更好的方法来做到这一点,所以我不会在相同的方法中包装任何新功能。某种委托集合不是实现这一点的正确方法吗?

有没有更“合适”的解决方案?

0 投票
6 回答
68259 浏览

c# - 如何在我的列表中形成一个好的谓词委托来查找()某些东西?

在查看 MSDN 之后,我仍然不清楚我应该如何使用 T 的成员变量(其中 T 是一个类)在 List 中使用 Find() 方法形成一个正确的谓词

例如:

我的“byYear”谓词应该是什么样的?

(MSDN 示例只讨论恐龙列表,只搜索不变的值“saurus”——它没有显示如何将值传递到谓词中......)

编辑:我正在使用 VS2005/.NET2.0,所以我认为 Lambda 符号对我不可用......

EDIT2:在示例中删除了“1999”,因为我可能想根据不同的值以编程方式“查找”。示例更改为使用 for-do 循环从 1980 年到 2000 年的汽车范围。

0 投票
5 回答
23433 浏览

c# - C# 中的委托数组

我正在尝试从委托数组中调用委托函数。我已经能够创建代表数组,但是如何调用代表?

编辑: 数组的原因是我需要根据需要通过索引调用委托函数。它们不会响应事件而运行。我在我的代码中看到一个严重(愚蠢)错误,因为我试图使用 pd[] 类型而不是数组(委托)的名称来执行委托函数。

0 投票
3 回答
21396 浏览

c# - 如何在多线程应用程序中安全地填充数据和 Refresh() DataGridView?

我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表。MousePos 是一个自定义类,它保存鼠标 X、Y 坐标(类型为“Point”)和该位置的运行计数。我有一个线程(System.Timers.Timer)每秒引发一次事件,检查鼠标位置,添加和/或更新此列表上的鼠标位置计数。

我想有一个类似的运行线程(再次,我认为 System.Timers.Timer 是一个不错的选择),它会再次引发一个事件,以自动 Refresh() DataGridView 以便用户可以看到数据屏幕更新。(就像 TaskManager 一样。)

不幸的是,调用 DataGridView.Refresh() 方法会导致 VS2005 停止执行并注意到我遇到了跨线程情况。

如果我理解正确,我现在有 3 个线程:

  • 主 UI 线程
  • MousePos 列表线程(定时器)
  • DataGridView 刷新线程(定时器)

为了查看是否可以 Refresh() 主线程上的 DataGridView,我向名为 DataGridView.Refresh() 的表单添加了一个按钮,但这(奇怪的是)没有做任何事情。我发现一个主题似乎表明如果我设置 DataGridView.DataSource = null 并返回到我的列表,它将刷新数据网格。确实这有效,但只能通过按钮(在主线程上处理。)


所以这个问题变成了一个两部分:

  1. 将 DataGridView.DataSource 设置为 null 并返回到我的 List 是一种可接受的刷新数据网格的方式吗?(对我来说似乎效率低下......)
  2. 如何在多线程环境中安全地执行此操作?

这是我到目前为止编写的代码(C#/.Net 2.0)

0 投票
4 回答
220 浏览

c# - 需要以相同方式处理的多种方法

在我目前正在编写的一段 C# 中,我需要以相同的方式处理具有相同签名的多个方法。将来可能还会有更多这些方法。我没有一遍又一遍地重复相同的逻辑,而是想到了以下内容:

我认为这有一些不错的功能,但也感觉有点过度设计和混淆。

你能感谢一个更好的方法吗?

顺便提一句:

  • 它不需要是事务性的。
  • strFailure 不会隐藏异常,它会在必要时完全包装它们

谢谢。

0 投票
5 回答
500 浏览

c# - 窗口之间的交互

在 C# 应用程序中的多个窗口之间进行交互的最佳/正确方式是什么?最近,我遇到了一个问题,其中一个程序窗口必须调用修改主窗口的方法。我的解决方案是创建类似工厂的类,它将安排所有底层模型数据并组织各种窗口之间的通信(通过委托)。但是,由于传递一两个代表不是问题,我开始思考如果我的其他窗口需要 10 个代表才能与主窗口正确交互怎么办?代表是好的解决方案吗?如何以良好的方式传递它们 - 通过构造函数、属性?或者也许需要使用这么多代表本身就是一些严重的设计缺陷?

0 投票
4 回答
13880 浏览

c# - 来自 DLL 的 C# 回调

我正在用 C#.NET 编写应用程序 A 和 DLL B。如何执行以下操作:

  1. A调用B中的函数
  2. 希望 B 使用委托/回调来更新 A 的 UI 中的状态

这与 BackgroundWorker无关……那部分在 A 中工作正常。我看不到的是如何让 B 知道在 A 中调用什么函数。

0 投票
5 回答
26126 浏览

.net - 委托和回调是否相同或相似?

委托与回调是一回事吗?或者它们是否以某种方式相关?

0 投票
2 回答
57163 浏览

c# - 如何正确注销事件处理程序

在代码审查中,我偶然发现了这个(简化的)代码片段来取消注册事件处理程序:

我认为这不会取消注册事件处理程序,因为它会创建一个以前从未注册过的新委托。但是搜索 MSDN 我发现了几个使用这个成语的代码示例。

于是我开始了一个实验:

令我惊讶的是,发生了以下事情:

  1. Fire("Hello 1");正如预期的那样,产生了两条消息。
  2. Fire("Hello 2");产生了一条消息!
    这让我相信注销new代表是有效的!
  3. Fire("Hello 3");扔了一个NullReferenceException
    调试代码表明这Firenull在取消注册事件之后。

我知道对于事件处理程序和委托,编译器会在后台生成大量代码。但我仍然不明白为什么我的推理是错误的。

我错过了什么?

附加问题:从没有注册事件的事实来看,我得出结论,无论Fire何时null触发事件,null都需要进行检查。