Catel.Modules.DownloadingModuleCatalog.OnDownloadModuleCompleted C# (CSharp) Метод

OnDownloadModuleCompleted() приватный Метод

Called when the download of a module has been completed.
private OnDownloadModuleCompleted ( object sender, OpenReadCompletedEventArgs e ) : void
sender object The sender.
e System.Net.OpenReadCompletedEventArgs The instance containing the event data.
Результат void
        private void OnDownloadModuleCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            var moduleInfo = (ModuleInfo) e.UserState;

            Log.Info("Downloaded module '{0}' from '{1}'", moduleInfo.ModuleName, GetModuleUri(moduleInfo));

            var webClient = (WebClient) sender;
            webClient.OpenReadCompleted -= OnDownloadModuleCompleted;

            if (e.Error != null)
            {
                Log.Error(e.Error, "An error occurred while downloading module '{0}', cannot handle completed callbacks", moduleInfo.ModuleName);
                return;
            }

            try
            {
                var moduleAsBytes = e.Result;

                Log.Debug("Received '{0}' kb, now registering the xap file", moduleAsBytes.Length / 1000);

                AssemblyHelper.RegisterAssembliesFromXap(e.Result, true);

                Log.Info("Instantiating module '{0}'", moduleInfo.ModuleName);

                var moduleType = TypeCache.GetType(moduleInfo.ModuleType);
                var module = TypeFactory.Default.CreateInstance(moduleType) as ModuleBase;

                Log.Info("Initializing module '{0}'", moduleInfo.ModuleName);

                module.Initialize();
            }
            catch (Exception ex)
            {
                Log.Error(ex, "An error occurred while instantiating or initializing module '{0}'", moduleInfo.ModuleName);
            }
            finally
            {
                var pendingQueue = _pendingLoads[moduleInfo.ModuleName];

                Log.Debug("Calling all '{0}' completed callbacks for module '{1}'", pendingQueue.Count, moduleInfo.ModuleName);

                while (pendingQueue.Count > 0)
                {
                    var completedCallback = pendingQueue.Dequeue();
                    completedCallback();
                }

                Log.Debug("Called all completed callbacks for module '{0}'", moduleInfo.ModuleName);

                _pendingLoads.Remove(moduleInfo.ModuleName);

                ModuleDownloaded.SafeInvoke(this, new ModuleEventArgs(moduleInfo));
            }
        }
#endregion