相关疑难解决方法(0)

可靠地停止System.Threading.Timer?

好吧,我已经搜索了很多解决方案.我正在寻找一种干净简单的方法来防止在我停止后调用System.Threading.Timer的回调方法.

我似乎无法找到任何东西,这导致我,在偶尔,诉诸可怕的线程 - thread.sleep-thread.abort组合颤抖.

可以用锁来完成吗?请帮我找到一个好办法.谢谢

c# multithreading timer

53
推荐指数
5
解决办法
7万
查看次数

定时器可以自动收集垃圾吗?

当您使用a Timer或者Thread只运行程序的整个生命周期时,您是否需要保留对它们的引用以防止它们被垃圾回收?

请放下以下程序可以timer作为类中的静态变量的事实,这只是一个展示问题的玩具示例.

public class Program
{
    static void Main(string[] args)
    {
        CreateTimer();

        Console.ReadLine();
    }

    private static void CreateTimer()
    {
        var program = new Program();

        var timer = new Timer();
        timer.Elapsed += program.TimerElapsed;
        timer.Interval = 30000;
        timer.AutoReset = false;
        timer.Enabled = true;
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        var timerCast = (Timer)sender;

        Console.WriteLine("Timer fired at in thread {0}", GetCurrentThreadId());

        timerCast.Enabled = true;
    }

    ~Program()
    {
        Console.WriteLine("Program Finalized");
    }

    [DllImport("kernel32.dll")]
    static extern uint GetCurrentThreadId(); …
Run Code Online (Sandbox Code Playgroud)

c# multithreading garbage-collection timer

24
推荐指数
2
解决办法
6833
查看次数

标签 统计

c# ×2

multithreading ×2

timer ×2

garbage-collection ×1