Game update status changed event args
Inheritance: BaseEventArgs
 private void OnStatusChanged(UpdateStatusEventArgs.Stage stage,
     int currentPatch, int maxPatch,
     double progress, double maxProgress,
     double summaryProgress, double summaryMaxProgress)
 {
     if (StatusChanged != null) {
         StatusChanged(this, new UpdateStatusEventArgs(stage, currentPatch, maxPatch, progress, maxProgress, summaryProgress, summaryMaxProgress));
     }
 }
        private void OnUpdateStatusChanged(object sender, UpdateStatusEventArgs e) {
            if (!this.Dispatcher.CheckAccess()) {
                this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new UpdateStatusEventHandler((s, e2) => {
                    OnUpdateStatusChanged(sender, e2);
                }), sender, e);
                return;
            }
            UpdateMainProgressBar(e.Progress, e.MaxProgress);
            UpdateSubProgressBar(e.SummaryProgress, e.SummaryMaxProgress);

            string updateText = string.Empty;
            switch (e.UpdateStage) {
                case UpdateStatusEventArgs.Stage.DOWNLOADING:
                    updateText = string.Format(LanguageManager.Model.UpdateDownloading, e.CurrentPatch, e.MaxPatch, e.SummaryProgress, e.SummaryMaxProgress);
                    break;

                case UpdateStatusEventArgs.Stage.EXTRACTING:
                    updateText = string.Format(LanguageManager.Model.UpdateExtracting, e.CurrentPatch, e.MaxPatch, e.SummaryProgress, e.SummaryMaxProgress);
                    break;

                case UpdateStatusEventArgs.Stage.INSTALLING:
                    updateText = string.Format(LanguageManager.Model.UpdateInstalling, e.Progress, e.MaxProgress);
                    break;
            }
            this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new SetInfoText((text_) => {
                UpdateText.Text = text_;
            }), updateText);
        }