System.Timers.Timer生命周期

2023-11-30

哪种方法是使用 System.Timers.Timer 的正确方法? 我的意思是...我创建计时器,设置间隔以及在 Elapsed 事件上调用的方法。

double ms = 1000;
var t = new System.Timers.Timer(ms);
t.AutoReset = false;
t.Elapsed += (sender, e) =>  { runTask(); }; 
t.Start();   

接下来是什么?应该在计时器上处理呼叫吗?我想我不能,否则 Elapsed 事件永远不会发生。 我是否应该在某个全局变量中注册计时器以避免丢失对它的引用,以便 GC 可以在调用 Elapsed 之前处理计时器? 如果是这样,一旦处理了 Elapsed 事件(因此我的任务已执行),我如何处理计时器?


如果您在长时间运行的进程(例如 Web 应用程序或 Windows 服务)期间使用计时器,如果您不想发生内存泄漏,则需要确保取消订阅计时器的已用事件处理程序希望垃圾收集器能够回收为 Timer 对象分配的内存。

System.Timers.Timer 实现 IDisposable,这里的指导原则是,如果您有一个实现 IDisposable 的类,则任何依赖于实现 IDisposable 的对象的类都应该实现 IDisposable 本身,并在调用对象本身时调用 Dispose() 方法。

System.Timers.Timer 就是一个完美的例子。这在幕后使用了 System.Threading.Timer,如果您查看反射器,您可以看到 System.Timers.Timer 上的 Dispose 方法的以下内容

public void Dispose()
{
    this.timerBase.Dispose();
}

在这里,timerBase 只是 System.Threading.Timer 的一个实例,因此 Dispose 调用会级联到实现 IDisposable 的类的所有依赖项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.Timers.Timer生命周期 的相关文章

  • 空 catch 与 try-catch 语句中的“catch Exception”相同吗?

    try catch Exception 我可以写吗 try catch 这在 C NET 3 5 中可以吗 代码看起来更好 但我不知道是否相同 他们是not一样的 catch Exception 将仅捕获托管异常 catch 也会捕获非 C
  • 如何在asp.net core 2.2中注册IFileProvider进行依赖注入?

    我有以下类 以便能够从引用项目的资源中提供文件 public class ConfigureOptions IPostConfigureOptions
  • Range For 循环帮助:“:”标记之前的预期初始值设定项

    我对 C 完全陌生 现在正在阅读 C Primer 一书 我写了一个关于字符串的小例子 代码如下 include
  • 有条件地忽略属性序列化

    我有一个 Asp Net WebApi 项目 我想返回 Json 格式的产品列表和一个特定产品 这是我的产品型号 public class Product public int Id get set public string ShortS
  • 比较 C++ 中的结构时未找到 == 运算符

    比较以下结构的两个实例 我收到错误 struct MyStruct1 MyStruct1 const MyStruct2 my struct 2 const int an int 1 my struct 2 my struct 2 an i
  • 如何确保我们读取 boost::child 进程中的所有行

    我在上面看到了下面的代码boost child文档页面 其中解释了如何读取子进程的输出 http www boost org doc libs 1 64 0 doc html boost process tutorial html http
  • 如何将位写入文件?

    如何使用 c net 将位 而不是字节 写入文件 我很坚持它 Edit 我正在寻找一种不同的方法 将每 8 位写为一个字节 一次可以写入的最小数据量是一个字节 如果您需要写入单独的位值 例如 二进制格式需要 1 位标志 3 位整数和 4 位
  • 从数据表中删除列

    我有一个包含 20 列的数据表 但我不需要当前处理的所有列 除了 5 列 所以我执行了以下操作来删除列 List
  • xamarin.forms 从 xaml 到属性的绑定

    我是一个 xaml 绑定的新手 有时我真的不明白 我的 xaml 中有这个
  • 关于结构的警告 C26495?

    过去一两年我一直在使用 C NET 但正在为客户更新旧的 C MFC 应用程序 我知道自从我上次使用 C 以来发生了很多变化 但这件事让我感到震惊 我有以下结构 typedef struct FILTERINFO int nCustomer
  • UDP打洞

    我有一些关于 UDP 打洞的问题 基于维基百科http en wikipedia org wiki UDP hole punching http en wikipedia org wiki UDP hole punching 1 要在两方
  • 将 IRandomAccessStreamWithContentType 转换为 Byte[]

    在我的应用程序中 我允许用户使用 ContactPicker 添加联系人 我尝试将 IRandomAccessStreamWithContentType 转换为 Byte IRandomAccessStreamWithContentType
  • Cython memoryviews:使用数组参数包装 c 函数以传递 numpy 数组

    我正在尝试使用 Cython 用数组参数包装 c 函数 quick sort 所以我可以将 numpy 数组传递给它 我已经在文档 SO 和网络中搜索了一个可行的 最小的示例 但没有找到它 我已经尝试了几种可能性 但没有任何进展 所以请帮我
  • OpenCV RGB转灰度

    我正在做一个视频监控项目 我看不到从 RGB 到灰度的转换 我为灰色设置了黑色窗口 你能帮我解决这个问题吗 附代码 另外 如何获得当前帧和前一帧之间的差异 多谢 宜兰 include stdafx h include
  • 在业务逻辑中使用反射是一种好的做法吗?

    我需要开发一个由两个主要部分组成的应用程序 具有特定业务类别的业务逻辑部分 例如书籍 图书馆 作者 一个通用部分 可以在数据网格中显示书籍 图书馆 将它们映射到数据库 通用部分使用反射从业务类中获取数据 而不需要在业务类中编写特定的数据网格
  • 在运行时检查 GCC 版本

    我需要找出 C 程序执行过程中 运行时 可用的 系统中安装的 GCC 版本 主要版本和次要版本 意思是 以编程方式提取可用 gcc 的版本 就像我在 shell 中输入 gcc version 一样 但在 c 程序中 The GNUC an
  • 类库的 app.config 中的绑定重定向有什么作用吗?

    我经常使用的 VS 解决方案包括单个可执行项目 控制台应用程序 网络应用程序 和许多类库项目这些都被可执行文件引用 使用 NuGet 并安装包时 经常会出现app config为每个项目创建的文件 通常只包含合并引用程序集版本的绑定重定向列
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • Promise.defer 的正确模式是什么?

    我正在使用 TypeScript 和async await来表示异步工作流程 该工作流程的一部分是调用 Web Worker 并在其回调结果时继续 在 C 中 我会创建一个TaskCompletionSource await its Tas
  • 是否存在永远不会匹配任何字符串的正则表达式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐