- Timestamp:
- 01/31/11 10:35:57 (14 years ago)
- Location:
- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveExperimentListView.cs
r4760 r5399 28 28 namespace HeuristicLab.Hive.ExperimentManager.Views { 29 29 [View("HiveExperimentList View")] 30 [Content(typeof(HiveExperiment List), true)]30 [Content(typeof(HiveExperimentCollection), true)] 31 31 [Content(typeof(IItemList<HiveExperiment>), false)] 32 public partial class HiveExperimentListView : Item ListView<HiveExperiment> {32 public partial class HiveExperimentListView : ItemCollectionView<HiveExperiment> { 33 33 34 34 public HiveExperimentListView() { … … 46 46 } else { 47 47 base.SetEnabledStateOfControls(); 48 if (Content != null) { 49 if (itemsListView.SelectedItems.Count > 0) { 50 // only allow delete-operation if all selected items are stored in hive (they have HiveExperimentId) 51 bool canRemove = true; 52 foreach (ListViewItem item in itemsListView.SelectedItems) { 53 canRemove = canRemove && Content[item.Index].HiveExperimentId != Guid.Empty; 54 } 55 this.removeButton.Enabled = canRemove; 56 } 57 } 48 this.removeButton.Enabled = Content != null && itemsListView.SelectedItems.Count > 0; 58 49 } 59 50 } -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.Designer.cs
r4760 r5399 24 24 /// </summary> 25 25 private void InitializeComponent() { 26 this.components = new System.ComponentModel.Container(); 26 27 this.stateLabel = new System.Windows.Forms.Label(); 27 28 this.stateTextBox = new System.Windows.Forms.TextBox(); … … 55 56 this.childHiveJobView = new HeuristicLab.Hive.ExperimentManager.Views.HiveJobListView(); 56 57 this.runsTabPage = new System.Windows.Forms.TabPage(); 58 this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 57 59 this.logTabPage = new System.Windows.Forms.TabPage(); 58 60 this.logView = new HeuristicLab.Core.Views.LogView(); 59 this. runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();61 this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); 60 62 this.jobStatusGroupBox.SuspendLayout(); 61 63 this.tabControl.SuspendLayout(); … … 66 68 this.runsTabPage.SuspendLayout(); 67 69 this.logTabPage.SuspendLayout(); 70 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 68 71 this.SuspendLayout(); 69 72 // … … 278 281 this.priorityTextBox.Size = new System.Drawing.Size(496, 20); 279 282 this.priorityTextBox.TabIndex = 41; 283 this.priorityTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.priorityTextBox_Validating); 284 this.priorityTextBox.Validated += new System.EventHandler(this.priorityTextBox_Validated); 280 285 // 281 286 // priorityLabel … … 296 301 this.coresNeededTextBox.Size = new System.Drawing.Size(496, 20); 297 302 this.coresNeededTextBox.TabIndex = 37; 303 this.coresNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.coresNeededTextBox_Validating); 304 this.coresNeededTextBox.Validated += new System.EventHandler(this.coresNeededTextBox_Validated); 298 305 // 299 306 // memoryNeededTextBox … … 305 312 this.memoryNeededTextBox.Size = new System.Drawing.Size(496, 20); 306 313 this.memoryNeededTextBox.TabIndex = 38; 314 this.memoryNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.memoryNeededTextBox_Validating); 315 this.memoryNeededTextBox.Validated += new System.EventHandler(this.memoryNeededTextBox_Validated); 307 316 // 308 317 // memoryNeededLabel … … 393 402 this.runsTabPage.Text = "Runs"; 394 403 this.runsTabPage.UseVisualStyleBackColor = true; 404 // 405 // runCollectionViewHost 406 // 407 this.runCollectionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 408 | System.Windows.Forms.AnchorStyles.Left) 409 | System.Windows.Forms.AnchorStyles.Right))); 410 this.runCollectionViewHost.Caption = "View"; 411 this.runCollectionViewHost.Content = null; 412 this.runCollectionViewHost.Enabled = false; 413 this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3); 414 this.runCollectionViewHost.Name = "runCollectionViewHost"; 415 this.runCollectionViewHost.ReadOnly = false; 416 this.runCollectionViewHost.Size = new System.Drawing.Size(613, 486); 417 this.runCollectionViewHost.TabIndex = 0; 418 this.runCollectionViewHost.ViewsLabelVisible = true; 419 this.runCollectionViewHost.ViewType = null; 395 420 // 396 421 // logTabPage … … 418 443 this.logView.TabIndex = 0; 419 444 // 420 // runCollectionViewHost 421 // 422 this.runCollectionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 423 | System.Windows.Forms.AnchorStyles.Left) 424 | System.Windows.Forms.AnchorStyles.Right))); 425 this.runCollectionViewHost.Caption = "View"; 426 this.runCollectionViewHost.Content = null; 427 this.runCollectionViewHost.Enabled = false; 428 this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3); 429 this.runCollectionViewHost.Name = "runCollectionViewHost"; 430 this.runCollectionViewHost.ReadOnly = false; 431 this.runCollectionViewHost.Size = new System.Drawing.Size(613, 486); 432 this.runCollectionViewHost.TabIndex = 0; 433 this.runCollectionViewHost.ViewType = null; 445 // errorProvider 446 // 447 this.errorProvider.ContainerControl = this; 434 448 // 435 449 // HiveJobView … … 451 465 this.runsTabPage.ResumeLayout(false); 452 466 this.logTabPage.ResumeLayout(false); 467 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 453 468 this.ResumeLayout(false); 454 469 … … 491 506 private System.Windows.Forms.TabPage runsTabPage; 492 507 private MainForm.WindowsForms.ViewHost runCollectionViewHost; 508 private System.Windows.Forms.ErrorProvider errorProvider; 493 509 } 494 510 } -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.cs
r4760 r5399 24 24 using HeuristicLab.Core.Views; 25 25 using HeuristicLab.MainForm; 26 using System.Text; 27 using HeuristicLab.Data; 26 28 27 29 namespace HeuristicLab.Hive.ExperimentManager.Views { … … 71 73 Content_JobStateChanged(this, EventArgs.Empty); 72 74 } 73 74 void Content_JobChanged(object sender, EventArgs e) { 75 76 private void RegisterJobEvents() { 77 if (Content != null && Content.Job != null) { 78 Content.Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged); 79 Content.Job.OptimizerChanged += new EventHandler(Job_OptimizerChanged); 80 } 81 } 82 83 private void DeregisterJobEvents() { 84 if (Content != null && Content.Job != null) { 85 Content.Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged); 86 Content.Job.OptimizerChanged -= new EventHandler(Job_OptimizerChanged); 87 } 88 } 89 90 #region Content Events 91 private void Content_JobChanged(object sender, EventArgs e) { 75 92 RegisterJobEvents(); 76 93 Job_OptimizerChanged(this, e); 77 94 } 78 95 79 void Job_OptimizerChanged(object sender, EventArgs e) {80 if (Content != null && Content.Job != null && Content.Job.Optimizer != null) {81 optimizerNamedItemView.Content = Content.Job.Optimizer;82 runCollectionViewHost.Content = Content.Job.Optimizer.Runs;83 } else {84 optimizerNamedItemView.Content = null;85 runCollectionViewHost.Content = null;86 }87 }88 89 private void RegisterJobEvents() {90 if (Content != null && Content.Job != null) {91 Content.Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);92 Content.Job.OptimizerChanged += new EventHandler(Job_OptimizerChanged);93 }94 }95 96 private void DeregisterJobEvents() {97 if (Content != null && Content.Job != null) {98 Content.Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);99 Content.Job.OptimizerChanged -= new EventHandler(Job_OptimizerChanged);100 }101 }102 103 #region Content Events104 96 private void Content_JobDtoChanged(object sender, EventArgs e) { 105 97 if (InvokeRequired) { … … 141 133 } 142 134 } 135 136 private void Job_OptimizerChanged(object sender, EventArgs e) { 137 if (Content != null && Content.Job != null && Content.Job.Optimizer != null) { 138 optimizerNamedItemView.Content = Content.Job.Optimizer; 139 runCollectionViewHost.Content = Content.Job.Optimizer.Runs; 140 } else { 141 optimizerNamedItemView.Content = null; 142 runCollectionViewHost.Content = null; 143 } 144 } 145 146 private void Job_ComputeInParallelChanged(object sender, EventArgs e) { 147 if (InvokeRequired) { 148 Invoke(new EventHandler(Job_ComputeInParallelChanged), sender, e); 149 } else { 150 computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel; 151 ShowOrHideChildJobTabPage(); 152 } 153 } 154 155 private void ShowOrHideChildJobTabPage() { 156 if (Content != null && Content.Job != null) { 157 if (!Content.Job.ComputeInParallel) { 158 if (tabControl.TabPages.Contains(childJobsTabPage)) 159 tabControl.TabPages.Remove(childJobsTabPage); 160 } else { 161 if (!tabControl.TabPages.Contains(childJobsTabPage)) 162 tabControl.TabPages.Insert(1, childJobsTabPage); 163 } 164 } 165 } 166 #endregion 143 167 144 168 protected override void SetEnabledStateOfControls() { … … 165 189 } 166 190 167 void Job_ComputeInParallelChanged(object sender, EventArgs e) { 168 if (InvokeRequired) { 169 Invoke(new EventHandler(Job_ComputeInParallelChanged), sender, e); 170 } else { 171 computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel; 172 ShowOrHideChildJobTabPage(); 173 } 174 } 175 176 private void ShowOrHideChildJobTabPage() { 177 if (Content != null && Content.Job != null) { 178 if (!Content.Job.ComputeInParallel) { 179 if (tabControl.TabPages.Contains(childJobsTabPage)) 180 tabControl.TabPages.Remove(childJobsTabPage); 181 } else { 182 if (!tabControl.TabPages.Contains(childJobsTabPage)) 183 tabControl.TabPages.Insert(1, childJobsTabPage); 184 } 185 } 191 #region Control Events 192 private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) { 193 if (Content != null) this.Content.Job.ComputeInParallel = this.computeInParallelCheckBox.Checked; 194 } 195 196 private void coresNeededTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) { 197 int val; 198 if ((!string.IsNullOrEmpty(coresNeededTextBox.Text)) && (!int.TryParse(coresNeededTextBox.Text, out val))) { 199 e.Cancel = true; 200 StringBuilder sb = new StringBuilder(); 201 sb.Append("Invalid Value (Valid Value Format: \""); 202 sb.Append(FormatPatterns.GetIntFormatPattern()); 203 sb.Append("\")"); 204 errorProvider.SetError(coresNeededTextBox, sb.ToString()); 205 coresNeededTextBox.SelectAll(); 206 } 207 } 208 209 private void coresNeededTextBox_Validated(object sender, EventArgs e) { 210 if (string.IsNullOrEmpty(coresNeededTextBox.Text)) Content.JobDto.CoresNeeded = 1; 211 else Content.JobDto.CoresNeeded = int.Parse(coresNeededTextBox.Text); 212 errorProvider.SetError(coresNeededTextBox, string.Empty); 213 } 214 215 private void memoryNeededTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) { 216 int val; 217 if ((!string.IsNullOrEmpty(memoryNeededTextBox.Text)) && (!int.TryParse(memoryNeededTextBox.Text, out val))) { 218 e.Cancel = true; 219 StringBuilder sb = new StringBuilder(); 220 sb.Append("Invalid Value (Valid Value Format: \""); 221 sb.Append(FormatPatterns.GetIntFormatPattern()); 222 sb.Append("\")"); 223 errorProvider.SetError(memoryNeededTextBox, sb.ToString()); 224 memoryNeededTextBox.SelectAll(); 225 } 226 } 227 228 private void memoryNeededTextBox_Validated(object sender, EventArgs e) { 229 if (string.IsNullOrEmpty(memoryNeededTextBox.Text)) Content.JobDto.MemoryNeeded = 0; 230 else Content.JobDto.MemoryNeeded = int.Parse(memoryNeededTextBox.Text); 231 errorProvider.SetError(memoryNeededTextBox, string.Empty); 232 } 233 234 private void priorityTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) { 235 int val; 236 if ((!string.IsNullOrEmpty(priorityTextBox.Text)) && (!int.TryParse(priorityTextBox.Text, out val))) { 237 e.Cancel = true; 238 StringBuilder sb = new StringBuilder(); 239 sb.Append("Invalid Value (Valid Value Format: \""); 240 sb.Append(FormatPatterns.GetIntFormatPattern()); 241 sb.Append("\")"); 242 errorProvider.SetError(priorityTextBox, sb.ToString()); 243 priorityTextBox.SelectAll(); 244 } 245 } 246 247 private void priorityTextBox_Validated(object sender, EventArgs e) { 248 if (string.IsNullOrEmpty(priorityTextBox.Text)) Content.JobDto.Priority = 0; 249 else Content.JobDto.Priority = int.Parse(priorityTextBox.Text); 250 errorProvider.SetError(priorityTextBox, string.Empty); 186 251 } 187 252 #endregion 188 253 189 private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) {190 if (Content != null) {191 this.Content.Job.ComputeInParallel = this.computeInParallelCheckBox.Checked;192 }193 }194 254 } 195 255 } -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.resx
r4423 r5399 113 113 </resheader> 114 114 <resheader name="reader"> 115 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version= 2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>115 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 116 116 </resheader> 117 117 <resheader name="writer"> 118 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version= 2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>118 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 119 119 </resheader> 120 <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> 121 <value>17, 17</value> 122 </metadata> 120 123 </root> -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentList.cs
r4760 r5399 26 26 27 27 namespace HeuristicLab.Hive.ExperimentManager { 28 [Item("HiveExperiment List", "Represents a list of hive experiments.")]28 [Item("HiveExperiment Collection", "Represents a list of hive experiments.")] 29 29 [StorableClass] 30 public class HiveExperiment List : ItemList<HiveExperiment> {31 public HiveExperiment List() : base() { }32 public HiveExperiment List(int capacity) : base(capacity) { }33 public HiveExperiment List(IEnumerable<HiveExperiment> collection) : base(collection) { }30 public class HiveExperimentCollection : ItemCollection<HiveExperiment> { 31 public HiveExperimentCollection() : base() { } 32 public HiveExperimentCollection(int capacity) : base(capacity) { } 33 public HiveExperimentCollection(IEnumerable<HiveExperiment> collection) : base(collection) { } 34 34 35 35 [StorableConstructor] 36 protected HiveExperiment List(bool deserializing) : base(deserializing) { }37 protected HiveExperiment List(HiveExperimentListoriginal, Cloner cloner)36 protected HiveExperimentCollection(bool deserializing) : base(deserializing) { } 37 protected HiveExperimentCollection(HiveExperimentCollection original, Cloner cloner) 38 38 : base(original, cloner) { 39 39 } 40 40 public override IDeepCloneable Clone(Cloner cloner) { 41 return new HiveExperiment List(this, cloner);41 return new HiveExperimentCollection(this, cloner); 42 42 } 43 43 } -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentManager.cs
r4914 r5399 42 42 } 43 43 44 private HiveExperiment ListhiveExperiments;45 public HiveExperiment ListHiveExperiments {44 private HiveExperimentCollection hiveExperiments; 45 public HiveExperimentCollection HiveExperiments { 46 46 get { return hiveExperiments; } 47 47 set { … … 73 73 private void RegisterHiveExperimentsEvent() { 74 74 if (hiveExperiments != null) { 75 hiveExperiments.ItemsRemoved += new CollectionItemsChangedEventHandler< IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);75 hiveExperiments.ItemsRemoved += new CollectionItemsChangedEventHandler<HiveExperiment>(hiveExperiments_ItemsRemoved); 76 76 } 77 77 } … … 79 79 private void DeRegisterHiveExperimentsEvents() { 80 80 if (hiveExperiments != null) { 81 hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler< IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);81 hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler<HiveExperiment>(hiveExperiments_ItemsRemoved); 82 82 } 83 83 } … … 100 100 IsProgressing = true; 101 101 if (this.HiveExperiments == null) { 102 this.HiveExperiments = new HiveExperiment List();102 this.HiveExperiments = new HiveExperimentCollection(); 103 103 } 104 104 using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) { … … 149 149 } 150 150 151 void hiveExperiments_ItemsRemoved(object sender, Collection s.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {151 void hiveExperiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<HiveExperiment> e) { 152 152 if (!currentlyUpdating) { 153 153 using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) { 154 foreach ( IndexedItem<HiveExperiment>item in e.Items) {155 if (item. Value.HiveExperimentId != Guid.Empty) {156 service.Obj.DeleteHiveExperiment(item. Value.HiveExperimentId);154 foreach (HiveExperiment item in e.Items) { 155 if (item.HiveExperimentId != Guid.Empty) { 156 service.Obj.DeleteHiveExperiment(item.HiveExperimentId); 157 157 } 158 158 } -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/JobResultPoller.cs
r4914 r5399 92 92 catch (Exception e) { 93 93 OnExceptionOccured(e); 94 IsPolling = false; 94 95 } 95 96 } 96 97 97 98 private void FetchJobResults() { 98 ResponseObject<JobResultList> response; 99 using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) { 100 response = service.Obj.GetChildJobResults(hiveJob.JobDto.Id, true, true); 99 int repetitions = 5; 100 ResponseObject<JobResultList> response = null; 101 while (response == null && repetitions > 0) { 102 repetitions--; 103 try { 104 using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) { 105 response = service.Obj.GetChildJobResults(hiveJob.JobDto.Id, true, true); 106 } 107 } 108 catch (Exception e) { 109 if (repetitions == 0) 110 throw e; 111 } 101 112 } 102 113 if (response.StatusMessage == ResponseStatus.Ok) { -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngine.cs
r5394 r5399 51 51 } 52 52 } 53 53 54 54 #region constructors and cloning 55 55 public HiveEngine() { … … 310 310 private void DeleteJobs(IDictionary<Guid, int> jobIndices) { 311 311 if (jobIndices.Count > 0) { 312 using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) { 313 foreach (Guid jobId in jobIndices.Keys) { 314 service.Obj.DeleteJob(jobId); 315 } 316 LogMessage(string.Format("Deleted {0} jobs on hive.", jobIndices.Count)); 317 jobIndices.Clear(); 318 } 312 TryAndRepeat(() => { 313 LogMessage(string.Format("Deleting {0} jobs on hive.", jobIndices.Count)); 314 using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) { 315 foreach (Guid jobId in jobIndices.Keys) { 316 service.Obj.DeleteJob(jobId); 317 } 318 jobIndices.Clear(); 319 } 320 }, 5, string.Format("Could not delete {0} jobs", jobIndices.Count)); 319 321 } 320 322 } … … 364 366 catch (Exception e) { 365 367 LogException(e); 368 LogMessage("Repeating upload"); 366 369 } 367 370 } … … 393 396 catch (Exception e) { 394 397 LogException(e); 398 LogMessage("Repeating download"); 395 399 } 396 400 } … … 423 427 } 424 428 } 429 430 /// <summary> 431 /// Executes the action. If it throws an exception it is repeated until repetition-count is reached. 432 /// If repetitions is -1, it is repeated infinitely. 433 /// </summary> 434 private static void TryAndRepeat(Action action, int repetitions, string errorMessage) { 435 while (repetitions > 0) { 436 try { action(); } 437 catch (Exception e) { 438 repetitions--; 439 if (repetitions == 0) { 440 throw new HiveEngineException(errorMessage, e); 441 } 442 } 443 } 444 } 445 446 private static void TryAndRepeat(Action action) { 447 TryAndRepeat(action, -1, string.Empty); 448 } 425 449 } 426 450 -
branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngineException.cs
r5228 r5399 7 7 public class HiveEngineException : Exception { 8 8 public HiveEngineException(string message) : base(message) { } 9 10 public HiveEngineException(string message, Exception innerException) : base (message, innerException) { } 9 11 } 10 12 }
Note: See TracChangeset
for help on using the changeset viewer.