From 30900b6e00d69cc8b87e54f6fce030b8ee487a4b Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 2 Dec 2014 14:07:37 +0100 Subject: [PATCH] Prevent timer delegate being GCd. --- Windows/Perspex.Win32/Win32Platform.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Windows/Perspex.Win32/Win32Platform.cs b/Windows/Perspex.Win32/Win32Platform.cs index 0ba4cb8589..34ea286e19 100644 --- a/Windows/Perspex.Win32/Win32Platform.cs +++ b/Windows/Perspex.Win32/Win32Platform.cs @@ -7,6 +7,7 @@ namespace Perspex.Win32 { using System; + using System.Collections.Generic; using System.Reactive.Disposables; using System.Threading; using System.Threading.Tasks; @@ -21,6 +22,8 @@ namespace Perspex.Win32 { private static Win32Platform instance = new Win32Platform(); + private List delegates = new List(); + public static void Initialize() { var locator = Locator.CurrentMutable; @@ -48,8 +51,12 @@ namespace Perspex.Win32 (uint)interval.TotalMilliseconds, timerDelegate); + // Prevent timerDelegate being garbage collected. + this.delegates.Add(timerDelegate); + return Disposable.Create(() => { + this.delegates.Remove(timerDelegate); UnmanagedMethods.KillTimer(IntPtr.Zero, handle); }); }