public static T GetSynchronized <T>(IThreadSync obj, Func <T> func) { object syncRoot; if (obj != null && obj.IsSynchronized && (syncRoot = obj.SyncRoot) != null) { Monitor.Enter(syncRoot); try { return(func()); } finally { Monitor.Exit(syncRoot); } } return(func()); }
public static void RunSynchronized(IThreadSync obj, Action action) { object syncRoot; if (obj != null && obj.IsSynchronized && (syncRoot = obj.SyncRoot) != null) { Monitor.Enter(syncRoot); try { action(); } finally { Monitor.Exit(syncRoot); } } else { action(); } }