问题标签 [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.
c# - 用委托或 lambda 包装秒表计时?
我正在编写这样的代码,做一些快速而肮脏的时间:
当然有一种方法可以将这段时间代码称为花哨的 .NET 3.0 lambda,而不是(上帝禁止)剪切和粘贴几次并替换DoStuff(s)
为DoSomethingElse(s)
?
我知道它可以做到,Delegate
但我想知道 lambda 方式。
c# - 执行顺序方法的最佳方法是什么?
处理一个必须每秒钟运行一组顺序方法的项目x
。现在,我将方法包含在另一个“父方法”中,然后依次调用它们。
在执行下一步之前,每个方法都必须成功运行且不引发异常。while
所以现在我用and包装了这些方法中的每一个try..catch
,然后catch
再次执行该方法。
这看起来很臭,而且不是很干。有没有更好的方法来做到这一点,所以我不会在相同的方法中包装任何新功能。某种委托集合不是实现这一点的正确方法吗?
有没有更“合适”的解决方案?
c# - 如何在我的列表中形成一个好的谓词委托来查找()某些东西?
在查看 MSDN 之后,我仍然不清楚我应该如何使用 T 的成员变量(其中 T 是一个类)在 List 中使用 Find() 方法形成一个正确的谓词
例如:
我的“byYear”谓词应该是什么样的?
(MSDN 示例只讨论恐龙列表,只搜索不变的值“saurus”——它没有显示如何将值传递到谓词中......)
编辑:我正在使用 VS2005/.NET2.0,所以我认为 Lambda 符号对我不可用......
EDIT2:在示例中删除了“1999”,因为我可能想根据不同的值以编程方式“查找”。示例更改为使用 for-do 循环从 1980 年到 2000 年的汽车范围。
c# - C# 中的委托数组
我正在尝试从委托数组中调用委托函数。我已经能够创建代表数组,但是如何调用代表?
编辑: 数组的原因是我需要根据需要通过索引调用委托函数。它们不会响应事件而运行。我在我的代码中看到一个严重(愚蠢)错误,因为我试图使用 pd[] 类型而不是数组(委托)的名称来执行委托函数。
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 并返回到我的列表,它将刷新数据网格。确实这有效,但只能通过按钮(在主线程上处理。)
所以这个问题变成了一个两部分:
- 将 DataGridView.DataSource 设置为 null 并返回到我的 List 是一种可接受的刷新数据网格的方式吗?(对我来说似乎效率低下......)
- 如何在多线程环境中安全地执行此操作?
这是我到目前为止编写的代码(C#/.Net 2.0)
c# - 需要以相同方式处理的多种方法
在我目前正在编写的一段 C# 中,我需要以相同的方式处理具有相同签名的多个方法。将来可能还会有更多这些方法。我没有一遍又一遍地重复相同的逻辑,而是想到了以下内容:
我认为这有一些不错的功能,但也感觉有点过度设计和混淆。
你能感谢一个更好的方法吗?
顺便提一句:
- 它不需要是事务性的。
- strFailure 不会隐藏异常,它会在必要时完全包装它们
谢谢。
c# - 窗口之间的交互
在 C# 应用程序中的多个窗口之间进行交互的最佳/正确方式是什么?最近,我遇到了一个问题,其中一个程序窗口必须调用修改主窗口的方法。我的解决方案是创建类似工厂的类,它将安排所有底层模型数据并组织各种窗口之间的通信(通过委托)。但是,由于传递一两个代表不是问题,我开始思考如果我的其他窗口需要 10 个代表才能与主窗口正确交互怎么办?代表是好的解决方案吗?如何以良好的方式传递它们 - 通过构造函数、属性?或者也许需要使用这么多代表本身就是一些严重的设计缺陷?
c# - 来自 DLL 的 C# 回调
我正在用 C#.NET 编写应用程序 A 和 DLL B。如何执行以下操作:
- A调用B中的函数
- 希望 B 使用委托/回调来更新 A 的 UI 中的状态
这与 BackgroundWorker无关……那部分在 A 中工作正常。我看不到的是如何让 B 知道在 A 中调用什么函数。
.net - 委托和回调是否相同或相似?
委托与回调是一回事吗?或者它们是否以某种方式相关?
c# - 如何正确注销事件处理程序
在代码审查中,我偶然发现了这个(简化的)代码片段来取消注册事件处理程序:
我认为这不会取消注册事件处理程序,因为它会创建一个以前从未注册过的新委托。但是搜索 MSDN 我发现了几个使用这个成语的代码示例。
于是我开始了一个实验:
令我惊讶的是,发生了以下事情:
Fire("Hello 1");
正如预期的那样,产生了两条消息。Fire("Hello 2");
产生了一条消息!
这让我相信注销new
代表是有效的!Fire("Hello 3");
扔了一个NullReferenceException
。
调试代码表明这Fire
是null
在取消注册事件之后。
我知道对于事件处理程序和委托,编译器会在后台生成大量代码。但我仍然不明白为什么我的推理是错误的。
我错过了什么?
附加问题:从没有注册事件的事实来看,我得出结论,无论Fire
何时null
触发事件,null
都需要进行检查。