private void SetState(LoadingArgs e) { switch (e.State) { case LoadingState.Initializtion: case LoadingState.Handling: progressState.Maximum = e.MaxValue; progressState.Minimum = e.MinValue; progressState.Value = e.Value; break; case LoadingState.Completion: Owner.Opacity = 1; Owner.Enabled = true; Close(); break; case LoadingState.Error: if (e.Error != null) { MessageBox.Show(this, e.Error, "处理错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } Owner.Opacity = 1; Owner.Enabled = true; Close(); break; } }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Owner.Enabled = false; Owner.Opacity = 0.6; if (Style != LoadingStyle.None) { picState.Visible = false; progressState.Visible = true; progressState.Dock = DockStyle.Fill; } else { picState.Visible = true; progressState.Visible = false; picState.Dock = DockStyle.Fill; } Action <Form> onExecute = e_ => { LoadingArgs args = new LoadingArgs(); args.Owner = Owner; args.OnChange = state => { Invoke(new Action <LoadingArgs>(SetState), args); }; try { OnExecute(args); args.State = LoadingState.Completion; args.Change(); } catch (Exception err) { args.State = LoadingState.Error; args.Error = err.Message; args.Change(); } }; ExecuteInvoke(onExecute); }
protected virtual void OnExecute(LoadingArgs args) { Execute(args); }