How to throttle the speed of an event without using Rx Framework(如何在不使用 Rx 框架的情况下限制事件的速度)
问题描述
我想限制事件的速度,如何在不使用 Microsoft Rx 框架的情况下实现这一点.我在 Rx 的帮助下完成了这项工作.但我正在尝试的是,我需要根据时隙限制 Map 的 View changed 事件.是否可以在不使用 Rx 的情况下实现相同的功能.
I want to throttle the speed of an event, How I can achieve this without using Microsoft Rx framework. I had done this with the help of Rx. But what I am trying is, I need to throttle Map's View changed event based on a time slot. Is it possible to implement the same without using Rx.
我不允许使用 Rx,我必须保持二进制大小尽可能小.
I am not allowed to use Rx and I have to keep the binary size as small as possible.
推荐答案
例如,如果您的事件是 EventHandler
类型,则此方法有效.它为你的事件处理程序创建了一个被限制的包装器:
This works, if your event is of type EventHandler<EventArgs>
for example. It creates a wrapper for your event handler that is throttled:
private EventHandler<EventArgs> CreateThrottledEventHandler(
EventHandler<EventArgs> handler,
TimeSpan throttle)
{
bool throttling = false;
return (s,e) =>
{
if(throttling) return;
handler(s,e);
throttling = true;
Task.Delay(throttle).ContinueWith(_ => throttling = false);
};
}
像这样附加:
this.SomeEvent += CreateThrottledEventHandler(
(s,e) => Console.WriteLine("I am throttled!"),
TimeSpan.FromSeconds(5));
不过,如果您以后需要使用 -=
取消连接,则应该存储从 CreateThrottledEventHandler
返回的处理程序.
Although, you should store the handler returned from CreateThrottledEventHandler
if you need to unwire it with -=
later.
这篇关于如何在不使用 Rx 框架的情况下限制事件的速度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在不使用 Rx 框架的情况下限制事件的速度
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 输入按键事件处理程序 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01