public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
     WindowsUpdateFrame.progressWindow.Dispatcher.BeginInvoke(new Action(() => WindowsUpdateFrame.progressWindow.Close()));
     WindowsUpdateFrame.updateDownloader.EndDownload(WindowsUpdateFrame.downloadJob);
     WindowsUpdateFrame.downloadJob = null;
     WindowsUpdateFrame.Dispatcher.BeginInvoke(new Action(() => WindowsUpdateFrame.BeginInstallation()));
 }
예제 #2
0
파일: WuAgent.cs 프로젝트: hobbit19/wumgr
 // Implementation of IDownloadCompletedCallback interface...
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
     // !!! warning this function is invoced from a different thread !!!
     agent.mDispatcher.Invoke(new Action(() => {
         agent.OnUpdatesDownloaded(downloadJob, downloadJob.AsyncState);
     }));
 }
        /// <summary>
        /// Callback. Used by the windows update api when the download completes. Do not call this method.
        /// </summary>
        void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
        {
            bool doCallback = false;

            lock (JobLock)
            {
                if (Job != null && Job.InternalJobObject == downloadJob && Job.IsCompleted)
                {
                    StopTimeoutTimer();
                    doCallback = true;
                }
            }
            // calling the callback inside the lock can lead to deadlocks when the callback tries to dispose this object
            if (doCallback)
            {
                _completedCallback(_uDownloader.EndDownload(DownloadJob), _uDownloader.Updates);
            }
        }
예제 #4
0
        //Downlaod Complete callback
        void IDownloadCompletedCallback.Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
        {
            try
            {
                var downloadResult = updateDownloader.EndDownload(downloadJob);

                //todo could downloads partially fail: the result above not success, but still some  updates available for install?
                if (downloadResult.ResultCode != OperationResultCode.orcSucceeded && downloadResult.ResultCode != OperationResultCode.orcSucceededWithErrors)
                {
                    DebugLog($"Download failed with code: {downloadResult.ResultCode}");
                    //return;
                    DownloadCompleted?.Invoke(false);
                }
                else
                {
                    //ReadyToInstall?.Invoke();
                    DownloadCompleted?.Invoke(true);
                }

                for (int i = 0; i < downloadJob.Updates.Count; i++)
                {
                    var resultCode = downloadResult.GetUpdateResult(i).ResultCode;
                    var title      = downloadJob.Updates[i].Title;
                    if (resultCode != OperationResultCode.orcSucceeded)
                    {
                        //the title must be there
                        //but if it it not for some reason we will detect this (via dict. exception)
                        updateResults[title].Error       = resultCode.ToString();
                        updateResults[title].IsInstalled = false;
                    }


                    DebugLog($"Download status for update {title}: {resultCode}");
                }
            }
            catch (Exception ex)
            {
                DownloadCompleted?.Invoke(false);

                Log.Error("IDownloadCompletedCallback.Invoke", ex.ToString());
            }
        }
예제 #5
0
 // Implementation of IDownloadCompletedCallback interface...
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs e)
 {
     form1.iDownloadComplete();
 }
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
     DownloadJob    = downloadJob;
     DownloadResult = Downloader?.EndDownload(DownloadJob);
 }
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
     _reporter?.Report(downloadJob.GetProgress());
 }
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
     this.CompleteTask();
     ServiceEventSource.Current.VerboseMessage("Callback: Downloading of Windows Updates completed.");
 }
예제 #9
0
 // Implementation of IDownloadCompletedCallback interface...
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs e)
 {
     form1.DownloadComplete();
 }
예제 #10
0
            public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
            {
                var clearProgressFlag = false;
                try
                {
                    if (_updateInProgress) return;

                    _updateInProgress = true;
                    clearProgressFlag = true;
                    var wrapper = new UpdateWrapper(downloadJob) { TotalPercent = 100, UpdatePercent = 100, CurrentIndex = downloadJob.Updates.Count};
                    wrapper.AdjustValues(_lastWrapper);
                    _lastWrapper = wrapper;
                    SetTitle(wrapper);
                    SetText(wrapper);
                }
                catch (Exception e)
                {
                    Log.WarnFormat("An issue occurred while An issue occurred while handling a download updates progress completed event: {0}", e);
                }
                finally
                {
                    if (clearProgressFlag) _updateInProgress = false;
                }
            }
예제 #11
0
 void IDownloadCompletedCallback.Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
 }
 public void Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs) => _state.Invoke(downloadJob, callbackArgs);
예제 #13
0
 void IDownloadCompletedCallback.Invoke(IDownloadJob downloadJob, IDownloadCompletedCallbackArgs callbackArgs)
 {
 }