Changeset 8165 for trunk/sources/HeuristicLab.MainForm
- Timestamp:
- 06/29/12 23:12:32 (12 years ago)
- Location:
- trunk/sources/HeuristicLab.MainForm/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
r8156 r8165 21 21 22 22 using System; 23 using HeuristicLab.Common; 23 24 24 25 namespace HeuristicLab.MainForm { 25 public interface IProgress { 26 string Status { get; set; } 27 double ProgressValue { get; set; } 26 public enum ProgressState { Started = 1, Canceled = 2, Finished = 3 }; 28 27 29 void Finish(); 30 void SignalSuccessfulCancelation(); 28 public interface IProgress : IContent { 29 /// <summary> 30 /// Gets the currently associated status text with the progress. 31 /// </summary> 32 string Status { get; } 33 /// <summary> 34 /// Gets the currently associated progress value in the range (0;1]. 35 /// Values outside this range are permitted and need to be handled in some feasible manner. 36 /// </summary> 37 double ProgressValue { get; } 38 /// <summary> 39 /// Gets the current state of the progress. Every progress starts in state 40 /// Started and then becomes either Canceled or Finished. 41 /// If it is reused it may be Started again. 42 /// </summary> 43 ProgressState ProgressState { get; } 44 /// <summary> 45 /// Returns whether the operation can be canceled or not. 46 /// This can change during the course of the progress. 47 /// </summary> 48 bool CanBeCanceled { get; } 31 49 32 bool CancelRequested { get; set; } 50 /// <summary> 51 /// Requests the operation behind the process to cancel. 52 /// Check the !ProgressState property when the cancellation succeeded. 53 /// The corresponding event will also notify of a success. 54 /// </summary> 55 /// <exception cref="NotSupportedException">Thrown when cancellation is not supported.</exception> 56 /// <param name="timeoutMs">The operation is given a certain timeout to cancel. If the operation doesn't cancel in this time it will be forcibly closed.</param> 57 void Cancel(int timeoutMs); 33 58 34 event EventHandler Finished; 59 /// <summary> 60 /// The status text changed. 61 /// </summary> 35 62 event EventHandler StatusChanged; 63 /// <summary> 64 /// The value of the progress changed. This is the (0;1] progress value from starting to finish. Values outside this range are permitted and need to be handled in some feasible manner. 65 /// </summary> 36 66 event EventHandler ProgressValueChanged; 37 event EventHandler Canceled; 67 /// <summary> 68 /// The state of the progress changed. The handler is supposed to query the ProgressState property. 69 /// </summary> 70 event EventHandler ProgressStateChanged; 71 /// <summary> 72 /// The progress' ability to cancel changed. 73 /// </summary> 74 event EventHandler CanBeCanceledChanged; 75 /// <summary> 76 /// A cancelation is requested with a certain timeout (in ms) in which it should occur gracefully. If the timeout is surpassed, it should be forcibly canceled. 77 /// </summary> 78 event EventHandler<EventArgs<int>> CancelRequested; 38 79 } 39 80 } -
trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs
r8145 r8165 21 21 22 22 using System; 23 using HeuristicLab.Common; 23 24 24 25 namespace HeuristicLab.MainForm { … … 26 27 private string status; 27 28 public string Status { 28 get { 29 return this.status; 30 } 29 get { return status; } 31 30 set { 32 if ( this.status != value) {33 this.status = value;31 if (status != value) { 32 status = value; 34 33 OnStatusChanged(); 35 34 } … … 37 36 } 38 37 39 public bool CancelRequested { get; set; }40 41 38 private double progressValue; 42 39 public double ProgressValue { 43 get { 44 return this.progressValue; 45 } 40 get { return progressValue; } 46 41 set { 47 if ( this.progressValue != value) {48 this.progressValue = value;42 if (progressValue != value) { 43 progressValue = value; 49 44 OnProgressChanged(); 50 45 } … … 52 47 } 53 48 54 public Progress() { } 55 56 public Progress(string status) { 57 this.Status = status; 49 private ProgressState progressState; 50 public ProgressState ProgressState { 51 get { return progressState; } 52 set { 53 if (progressState != value) { 54 progressState = value; 55 OnProgressStateChanged(); 56 } 57 } 58 58 } 59 59 60 public void Finish() { 61 OnFinished(); 60 private bool canBeCanceled; 61 public bool CanBeCanceled { 62 get { return canBeCanceled; } 63 set { 64 if (canBeCanceled != value) { 65 canBeCanceled = value; 66 OnCanBeCanceledChanged(); 67 } 68 } 62 69 } 63 70 64 public void SignalSuccessfulCancelation() { 65 OnCanceled(); 71 public Progress() { 72 progressState = ProgressState.Started; 73 } 74 public Progress(string status) 75 : this() { 76 this.status = status; 77 } 78 public Progress(string status, double progressValue) 79 : this(status) { 80 this.progressValue = progressValue; 81 } 82 83 public void Cancel(int timeoutMs) { 84 if (canBeCanceled) 85 OnCancelRequested(timeoutMs); 86 } 87 88 /// <summary> 89 /// Sets the ProgressValue to 1 and the ProgressState to Finished. 90 /// </summary> 91 public void Finish() { 92 if (ProgressValue != 1.0) ProgressValue = 1.0; 93 ProgressState = ProgressState.Finished; 66 94 } 67 95 68 96 #region Event Handler 69 public event EventHandler Canceled;70 private void OnCanceled() {71 var handler = Canceled;72 try {73 if (handler != null) handler(this, EventArgs.Empty);74 }75 catch (Exception) { }76 }77 78 public event EventHandler Finished;79 private void OnFinished() {80 var handler = Finished;81 try {82 if (handler != null) handler(this, EventArgs.Empty);83 }84 catch (Exception) { }85 }86 87 97 public event EventHandler StatusChanged; 88 98 private void OnStatusChanged() { … … 90 100 try { 91 101 if (handler != null) handler(this, EventArgs.Empty); 92 } 93 catch (Exception) { } 102 } catch { } 94 103 } 95 104 … … 99 108 try { 100 109 if (handler != null) handler(this, EventArgs.Empty); 101 } 102 catch (Exception) { } 110 } catch { } 111 } 112 113 public event EventHandler ProgressStateChanged; 114 private void OnProgressStateChanged() { 115 var handler = ProgressStateChanged; 116 try { 117 if (handler != null) handler(this, EventArgs.Empty); 118 } catch { } 119 } 120 121 public event EventHandler CanBeCanceledChanged; 122 private void OnCanBeCanceledChanged() { 123 var handler = CanBeCanceledChanged; 124 try { 125 if (handler != null) handler(this, EventArgs.Empty); 126 } catch { } 127 } 128 129 public event EventHandler<EventArgs<int>> CancelRequested; 130 private void OnCancelRequested(int timeoutMs) { 131 var handler = CancelRequested; 132 try { 133 if (handler == null) throw new NotSupportedException("Cancel request was ignored."); 134 else handler(this, new EventArgs<int>(timeoutMs)); 135 } catch { } 103 136 } 104 137 #endregion
Note: See TracChangeset
for help on using the changeset viewer.