From 3c247399fef2b448e5000bac6dad26bc171b20c7 Mon Sep 17 00:00:00 2001 From: hjhun <36876573+hjhun@users.noreply.github.com> Date: Tue, 4 Sep 2018 18:20:57 +0900 Subject: [PATCH] [Tizen.Applications.Common] Modified TizenSynchronizationContext Impl (#451) - Uses static class Signed-off-by: Hwankyu Jhun --- .../TizenSynchronizationContext.cs | 66 +++++++++++----------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/Tizen.Applications.Common/Tizen.Applications/TizenSynchronizationContext.cs b/src/Tizen.Applications.Common/Tizen.Applications/TizenSynchronizationContext.cs index 741242c..799b0bf 100644 --- a/src/Tizen.Applications.Common/Tizen.Applications/TizenSynchronizationContext.cs +++ b/src/Tizen.Applications.Common/Tizen.Applications/TizenSynchronizationContext.cs @@ -20,27 +20,12 @@ using System.Threading; namespace Tizen.Applications { - /// /// Provides a synchronization context for the Tizen application model. /// /// 3 public class TizenSynchronizationContext : SynchronizationContext { - private readonly Interop.Glib.GSourceFunc _wrapperHandler; - private readonly Object _transactionLock = new Object(); - private readonly ConcurrentDictionary _handlerMap = new ConcurrentDictionary(); - private int _transactionId = 0; - - /// - /// Initializes a new instance of the TizenSynchronizationContext class. - /// - /// 3 - public TizenSynchronizationContext() - { - _wrapperHandler = new Interop.Glib.GSourceFunc(Handler); - } - /// /// Initilizes a new TizenSynchronizationContext and install into the current thread. /// @@ -56,7 +41,6 @@ namespace Tizen.Applications SetSynchronizationContext(new TizenSynchronizationContext()); } - /// /// Dispatches an asynchronous message to a Tizen main loop. /// @@ -67,7 +51,7 @@ namespace Tizen.Applications /// 3 public override void Post(SendOrPostCallback d, object state) { - Post(() => + GSourceManager.Post(() => { d(state); }); @@ -85,7 +69,7 @@ namespace Tizen.Applications { var mre = new ManualResetEvent(false); Exception err = null; - Post(() => + GSourceManager.Post(() => { try { @@ -107,27 +91,43 @@ namespace Tizen.Applications } } - private void Post(Action action) + private static class GSourceManager { - int id = 0; - lock (_transactionLock) + private static Interop.Glib.GSourceFunc _wrapperHandler; + private static Object _transactionLock; + private static ConcurrentDictionary _handlerMap; + private static int _transactionId; + + static GSourceManager() { - id = _transactionId++; + _wrapperHandler = new Interop.Glib.GSourceFunc(Handler); + _transactionLock = new Object(); + _handlerMap = new ConcurrentDictionary(); + _transactionId = 0; } - _handlerMap.TryAdd(id, action); - Interop.Glib.IdleAdd(_wrapperHandler, (IntPtr)id); - } - private bool Handler(IntPtr userData) - { - int key = (int)userData; - if (_handlerMap.ContainsKey(key)) + public static void Post(Action action) { - Action action; - _handlerMap.TryRemove(key, out action); - action?.Invoke(); + int id = 0; + lock (_transactionLock) + { + id = _transactionId++; + } + _handlerMap.TryAdd(id, action); + Interop.Glib.IdleAdd(_wrapperHandler, (IntPtr)id); + } + + private static bool Handler(IntPtr userData) + { + int key = (int)userData; + if (_handlerMap.ContainsKey(key)) + { + Action action; + _handlerMap.TryRemove(key, out action); + action?.Invoke(); + } + return false; } - return false; } } } -- 2.7.4