首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET计时器-资源清理

.NET计时器-资源清理
EN

Stack Overflow用户
提问于 2009-07-23 17:33:18
回答 3查看 1.1K关注 0票数 0

如何在C#中释放计时器使用的资源尝试了以下方法,但在我的应用程序中都不起作用。

代码语言:javascript
复制
            t.Dispose();
            t.Stop();
            t.EndInit();
            t.Close();
EN

回答 3

Stack Overflow用户

发布于 2009-07-23 17:36:05

你怎么知道它不起作用?

Dispose()应该可以工作。之后你还可以使用计时器吗(如果它工作得很好,你就不应该使用了)?

如果你想释放内存,你必须调用GC.Collect()。

此外,建议将计时器包装在using语句中(如果您在其他地方不需要计时器):

代码语言:javascript
复制
 using (Timer t = new Timer())
 {
      // Do stuff with t
 }

然后将自动调用Timer.Dispose()。

下面是一个配置计时器的示例:

代码语言:javascript
复制
    static void TimerTest()
    {
        using (Timer t = new Timer(200))
        {
            t.Start();
            t.Elapsed += new ElapsedEventHandler(t_Elapsed);
            System.Threading.Thread.Sleep(5000); // Do some work here.
        }
        System.Threading.Thread.Sleep(5000); // Wait before closing the application
    }

    static void t_Elapsed(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("Hello.");
    }

在Main()方法中调用它。它将打印“Hello”。5秒后,定时器被释放,t_Elapsed不会再被调用。再过5秒,应用程序退出。

票数 2
EN

Stack Overflow用户

发布于 2009-07-23 17:36:40

在C#中,资源不会立即释放,因为它是一个托管环境。当您调用Dispose()时,它会将资源标记为垃圾收集。不过,垃圾收集不会通过调用Dispose自动开始,而是由Runtime Environment在它认为合适的时候启动。

因此,当运行时环境决定需要释放一些资源时,只需调用Dispose,资源就会得到处理。

See this link for a further description of Garbage Collection.

票数 0
EN

Stack Overflow用户

发布于 2009-07-23 17:38:57

根据上面的列表,我猜这是一个System.Timers.Timer。

您应该能够执行以下操作:

代码语言:javascript
复制
t.Stop();
t.Dispose();

完成此操作后,计时器将停止,其主要(非托管)资源将被释放。但是,直到引用的所有元素不再植根于应用程序,并且GC可以清理它们时,它所使用的资源才会被清理。

确保允许t变量超出作用域,并且允许t计时器使用的任何内容超出作用域。如果你这样做的话,GC会在准备好的时候清理这些对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1173305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档