internal static void Dispose()
        {
            lock (init_sync)
            {
                if (initialized && !disposing && !disposed && !initializing)
                {
                    disposing = true;
                }
                else
                {
                    return;
                }
            }

            try
            {
                if (FeedFetcher != null)
                {
                    FeedFetcher.Cancel();
                }

                DownloadCore.DownloadCompleted   -= OnDownloadCompletedHandler;
                DownloadCore.DownloadTaskStarted -= OnDownloadTaskStartedHandler;
                DownloadCore.DownloadTaskStopped -= OnDownloadTaskStoppedHandler;

                DownloadCore.DownloadDropped    -= OnDownloadDroppedHandler;
                DownloadCore.DownloadRegistered -= OnDownloadRegisteredHandler;

                DownloadCore.RegistrationFailed -= OnRegistrationFailedHandler;

                DownloadCore.Dispose();
                Library.Dispose();

                DestroySource();
            }
            finally
            {
                lock (init_sync)
                {
                    disposing = false;
                }
            }

            lock (init_sync)
            {
                initialized = false;
                disposed    = true;
            }
        }