public void RemoveFrontend(CoreDispatcher d)
 {
     Logger.LogTrace("RemoveFrontend() locking");
     SemaphoreSlim.Wait(CancelSource.Token);
     Logger.LogTrace("RemoveFrontend() locked");
     Logger.LogInformation("Unregistering frontend of dispatcher {0}", d.GetHashCode());
     Frames.Remove(d);
     SemaphoreSlim.Release();
     Logger.LogTrace("RemoveFrontend() released");
 }
Beispiel #2
0
        public static IXamlDirect GetXamlDirectForWindow(CoreDispatcher dispatcher)
        {
            int hash = dispatcher.GetHashCode();

            if (_xamlDirectCache.TryGetValue(hash, out IXamlDirect d))
            {
                return(d);
            }

            d = XamlDirect.GetDefault();
            _xamlDirectCache[hash] = d;
            return(d);
        }
Beispiel #3
0
        public async Task RemoveFrontend(CoreDispatcher d)
        {
            Logger.LogTrace("RemoveFrontend() locking");
            await SemaphoreSlim.WaitAsync(CancelSource.Token);

            try
            {
                Logger.LogTrace("RemoveFrontend() locked");
                Logger.LogInformation("Unregistering frontend of dispatcher {0}", d.GetHashCode());
                Frames.Remove(d);
            }
            catch (Exception e)
            {
                Logger.LogCritical($"RemoveFrontend failed(): {e.Message} ({e.GetType()})\n{e.StackTrace}");
            }
            finally
            {
                SemaphoreSlim.Release();
                Logger.LogTrace("RemoveFrontend() released");
            }
        }